Đại biểu là con đường để đi.
Như đã thấy với các câu trả lời khác sử dụng lượt xem có thể bị lỗi thời. Ai biết được ngày mai có thể có một trình bao bọc khác và có thể cần phải sử dụng cell superview]superview]superview]superview]
. Và nếu bạn sử dụng các thẻ, bạn sẽ kết thúc với số n nếu có điều kiện khác để xác định ô. Để tránh tất cả các thiết lập đại biểu.(Bằng cách làm như vậy, bạn sẽ tạo ra một lớp ô có thể sử dụng lại. Bạn có thể sử dụng cùng một lớp ô như một lớp cơ sở và tất cả những gì bạn phải làm là thực hiện các phương thức ủy nhiệm.)
Đầu tiên chúng ta cần một giao diện (giao thức) sẽ được sử dụng bởi các tế bào để giao tiếp (nút ủy nhiệm). ( Bạn có thể tạo một tệp .h riêng cho giao thức và bao gồm trong cả trình điều khiển xem bảng và các lớp ô tùy chỉnh HOẶC chỉ cần thêm nó vào lớp ô tùy chỉnh mà dù sao cũng sẽ được bao gồm trong trình điều khiển xem bảng )
@protocol CellDelegate <NSObject>
- (void)didClickOnCellAtIndex:(NSInteger)cellIndex withData:(id)data;
@end
Bao gồm giao thức này trong bộ điều khiển xem bảng và ô tùy chỉnh. Và đảm bảo bộ điều khiển xem bảng xác nhận giao thức này.
Trong ô tùy chỉnh tạo hai thuộc tính:
@property (weak, nonatomic) id<CellDelegate>delegate;
@property (assign, nonatomic) NSInteger cellIndex;
Trong UIButton
IBAction, nhấp vào đại biểu: ( Có thể được thực hiện tương tự cho bất kỳ hành động nào trong lớp ô tùy chỉnh cần được ủy quyền trở lại để xem trình điều khiển )
- (IBAction)buttonClicked:(UIButton *)sender {
if (self.delegate && [self.delegate respondsToSelector:@selector(didClickOnCellAtIndex:withData:)]) {
[self.delegate didClickOnCellAtIndex:_cellIndex withData:@"any other cell data/property"];
}
}
Trong bộ điều khiển xem bảng cellForRowAtIndexPath
sau khi bỏ qua ô, đặt các thuộc tính trên.
cell.delegate = self;
cell.cellIndex = indexPath.row; // Set indexpath if its a grouped table.
Và thực hiện ủy nhiệm trong trình điều khiển xem bảng:
- (void)didClickOnCellAtIndex:(NSInteger)cellIndex withData:(id)data
{
// Do additional actions as required.
NSLog(@"Cell at Index: %d clicked.\n Data received : %@", cellIndex, data);
}
Đây sẽ là cách tiếp cận lý tưởng để có được các hành động nút ô tùy chỉnh trong trình điều khiển xem bảng.