>

이것은 내 머리를하고있다 :-)

완전히 작동하는 CoreData로 채워진 UITableView 가 있습니다   UIViewController 내부  '삭제하기 스 와이프 옵션'(쉽게)을 성공적으로 구현했으며 빨간색 원이 나타나는 편집 버튼으로 단일 인스턴스를 삭제할 수도 있습니다.

내 문제는 CustomCell이 있기 때문에 편집 버튼을 누르면 UILabels 가 발생한다고 생각합니다.  오른쪽으로 움직이지 마십시오.

-(void)layoutSubViews 를 사용해 보았습니다  그 외 몇 개는 작동하지 않습니다.

cellForRowAtIndexPath 에 대한 코드를 게시했습니다 . 이것은 내 앱의 메모 섹션의 일부입니다. 이 코드가 작동합니다.편집 모드로 들어갈 때 레이블을 이동하는 방법 ??

팁과 조언을 주셔서 감사합니다 :-)

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"Cell";
MNCustomCell *cell = [_mainTableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
if (cell == nil) {
    cell = [[MNCustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}

//cell.textLabel.text = [_tableArray objectAtIndex:indexPath.row];
MNotes *mnotes = [[self fetchedResultsController] objectAtIndexPath:indexPath];
cell.noteTitle.text = mnotes.noteTitleString;
cell.noteSummary.text = mnotes.mainNoteString;
mnotes.createDate = [[NSDate alloc] init];
SORelativeDateTransformer *relativeDateTransformer = [[SORelativeDateTransformer alloc] init];
NSString *relativeDate = [relativeDateTransformer transformedValue:mnotes.createDate];
cell.noteDate.text = relativeDate;

cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
return cell;
}

-

//This is the Custom Cell
@interface MNCustomCell : UITableViewCell
{
}
@property (strong, nonatomic) IBOutlet UILabel *noteTitle;
@property (strong, nonatomic) IBOutlet UILabel *noteDate;
@property (strong, nonatomic) IBOutlet UITextView *noteSummary;

@end

-

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
  {
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
    // Initialization code
    [self.contentView addSubview:_noteTitle];
    [self.contentView addSubview:_noteSummary];
    [self.contentView addSubview:_noteDate];
  }
   return self;
  }


  • 답변 # 1

    다른 해결책은 효과가있을 수 있지만이 방법으로 애니메이션이 자동으로 수행됩니다. 와이즈 비즈  셀의 현재 상태에 따라보기를 다시 레이아웃하지 않지만 셀의 contentView에 레이블을 추가하면 레이블이 추가됩니다.

    다음 예는 레이블을 이동하여 삭제 버튼을 방해하지 않습니다.

    MNCustomCell

    MNCustomCell.m
    
    

  • 답변 # 2

    맞춤형 셀 클래스에서 다음 메소드를 구현하십시오.

    - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
        self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
        if (self) {
            mainLabel = [[[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, 220.0, 15.0)]];
            mainLabel.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleHeight;
            [cell.contentView addSubview:mainLabel];
    
    

    - (void)willTransitionToState:(UITableViewCellStateMask)state
    
    

    라벨을 적절하게 이동하십시오.

    같아야합니다

    - (void)didTransitionToState:(UITableViewCellStateMask)state
    
    

    수정 :

    - (void)willTransitionToState:(UITableViewCellStateMask)state {
        [super willTransitionToState:state];
        if ((state & UITableViewCellStateShowingDeleteConfirmationMask) == UITableViewCellStateShowingDeleteConfirmationMask) {
           label.frame = ...
        }
    }
    
    

  • 답변 # 3

    해킹이지만 나를 위해 일한 유일한 것은 숨겨진 이미지를 넣고 레이블을 제한하는 것이 었습니다.

    예 :

    UITableViewCell 내에 UILabel이있어서 화면을 화면 안팎으로 애니메이션 할 때 셀과 함께 움직이지 않았습니다. 그러나 다른 셀은 제대로 작동했습니다. 나는 모든 것을 시도했다.

    저는 다른 셀과 마찬가지로 레이블 왼쪽에 이미지를 넣고 레이블에서 고정 너비 이미지에 제약 조건을 추가하고 이미지 왼쪽에서 컨테이너에 제약 조건을 추가했습니다.

    이로 인해 내 문제가 해결되었으며 이제 레이블이 셀로 애니메이션됩니다.

    Jennyy 레이아웃이 레이블에서 어떤 일이 벌어지고 있는지 잘 모르겠지만 모든 콘텐츠 모드를 시험해 보았고 2 시간 이상 동안 설정을 사용했지만 다른 기능은 없었습니다. - (void)willTransitionToState:(UITableViewCellStateMask)state { [super willTransitionToState:state]; // label.hidden = YES; // label.alpha = 0.0; } - (void)didTransitionToState:(UITableViewCellStateMask)state { [super didTransitionToState:state]; if (state == UITableViewCellStateShowingDeleteConfirmationMask) { [UIView beginAnimations:@"anim" context:nil]; label.frame = leftFrame; [UIView commitAnimations]; } else if (state == UITableViewCellStateDefaultMask) { [UIView beginAnimations:@"anim" context:nil]; label.frame = rightFrame; [UIView commitAnimations]; } }

  • 이전 c# - 버튼을 사용하여 필터를 토글합니다 MVC
  • 다음 c# - 경로 패턴과 경로 일치