2016-07-28 4 views
0

iOS-App을 개발 중이므로 UITableViewController를 사용합니다. "cellForRowAtIndexPath"내 나는 재사용 식별자와 세포를 사용재사용 식별자가있는 셀 참조

[[[UITableViewCell alloc] initWithStyle:UITableViewCellStyle1 reuseIdentifier:textFieldIdentifier]; 

문제는 일부 세포가 서로 예를 들어,에 실행 종속을 가지고있다 사용자가 한 셀에 텍스트를 입력하면 다른 셀이 값을 변경합니다.

그래서 변경해야하는 셀 참조를 안전하게 유지하는 가장 좋은 방법은 무엇입니까? 문제는 "cellForRowAtIndexPath"내의 참조가 "textFieldDidChange"콜백 중에 참조가 손상되었을 수 있다는 것입니다. 셀이 보이지 않거나 재사용 식별자로 인해 다른 셀에 주소가 있으면?!

답변

1

캐시 된 셀에 대한 참조를 저장하지 마십시오. 테이블의 데이터 소스 을 표시하려면으로 업데이트하고 reloadData으로 전화하십시오. 그렇게하면 테이블이 보이는 셀을 새로 고치고 캐시를 처리하므로 ... 필요가 없습니다. 당신이 당신의 세포에 대한 모델이 있어야하고 모든 변경 사항은 해당 모델에 반영해야합니다

+1

에 대한 프로토콜을 만들 것입니다. 모델을 업데이트 한 후 필요에 따라 해당 셀 또는 전체 테이블을 다시로드합니다. – Losiowaty

0

나는 나 자신을 조금 확장 할 수 있도록 허용 세포

@protocol MyProtocol <NSobject> 
- (void) changeText:(NSString)theText; 
@end 

@interface TableViewCell1 : UITableViewCell 
@property (nonatomic, weak) id<MyProtocol> delegate; 
@end 

@implementation TableViewCell1 
//put this in the method where you get the value of the textfield 
[self.delegate chageText:@"Hello"]; 
@end 

@interface TableViewCell2 : UITableViewCell <MyProtocol> 
@end 

@implementation TableViewCell2 
- (void) chageText:(NSString *)text { 
    self.textLabel.text = text; 
} 
@end