ผู้ได้รับมอบหมายเป็นวิธีที่จะไป
เท่าที่เห็นกับคำตอบอื่น ๆ ที่ใช้มุมมองอาจล้าสมัย 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
หลังจาก dequeing เซลล์ตั้งค่าคุณสมบัติข้างต้น
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);
}
นี่จะเป็นวิธีที่เหมาะสมที่สุดในการรับการกระทำของปุ่มเซลล์แบบกำหนดเองในตัวควบคุมมุมมองตาราง