대표자들이 갈 길입니다.
다른 답변에서 볼 수 있듯이 뷰를 사용하면 구식이 될 수 있습니다. 내일 또 다른 포장지가있을 수 있으며이를 사용해야 할 수도있는 사람 cell superview]superview]superview]superview]
. 태그를 사용하면 셀을 식별하기위한 n 개의 조건이 생길 수 있습니다. 그 모든 설정을 피하기 위해. (이렇게하면 재사용 가능한 셀 클래스가 작성됩니다. 기본 클래스와 동일한 셀 클래스를 사용할 수 있으며 위임 메소드를 구현하기 만하면됩니다.)
먼저 우리는 인터페이스 (프로토콜)가 필요합니다.이 프로토콜은 셀에서 버튼 클릭을 전달 (대리)하는 데 사용됩니다. ( 프로토콜에 대해 별도의 .h 파일을 생성하고 테이블 뷰 컨트롤러와 사용자 정의 셀 클래스 모두에 포함하거나 테이블 뷰 컨트롤러에 포함될 사용자 정의 셀 클래스에 추가 할 수 있습니다 )
@protocol CellDelegate <NSObject>
- (void)didClickOnCellAtIndex:(NSInteger)cellIndex withData:(id)data;
@end
이 프로토콜을 사용자 정의 셀 및 테이블보기 컨트롤러에 포함하십시오. 그리고 테이블 뷰 컨트롤러가이 프로토콜을 확인하는지 확인하십시오.
사용자 정의 셀에서 두 가지 특성을 작성하십시오.
@property (weak, nonatomic) id<CellDelegate>delegate;
@property (assign, nonatomic) NSInteger cellIndex;
에 UIButton
IBAction를 위임 클릭 ( 같은 뷰 컨트롤러에 다시 위임 할 필요가 사용자 정의 셀 클래스의 모든 행동을 수행 할 수 있습니다 )
- (IBAction)buttonClicked:(UIButton *)sender {
if (self.delegate && [self.delegate respondsToSelector:@selector(didClickOnCellAtIndex:withData:)]) {
[self.delegate didClickOnCellAtIndex:_cellIndex withData:@"any other cell data/property"];
}
}
cellForRowAtIndexPath
셀을 큐 해제 한 후 테이블보기 컨트롤러 에서 위의 특성을 설정하십시오.
cell.delegate = self;
cell.cellIndex = indexPath.row; // Set indexpath if its a grouped table.
그리고 테이블 뷰 컨트롤러에서 델리게이트를 구현하십시오.
- (void)didClickOnCellAtIndex:(NSInteger)cellIndex withData:(id)data
{
// Do additional actions as required.
NSLog(@"Cell at Index: %d clicked.\n Data received : %@", cellIndex, data);
}
이것은 테이블 뷰 컨트롤러에서 사용자 정의 셀 버튼 동작을 얻는 이상적인 방법입니다.