ไม่มีจากคำตอบข้างต้นแก้ปัญหาได้อย่างถูกต้อง เหตุผลก็คือเราต้องการปิดการใช้งานการเลือกเซลล์ แต่ไม่จำเป็นต้องเป็นหน้าย่อยภายในเซลล์
ในกรณีของฉันฉันกำลังนำเสนอ UISwitch ที่อยู่ตรงกลางแถวและฉันต้องการปิดการเลือกสำหรับส่วนที่เหลือของแถว (ซึ่งว่างเปล่า) แต่ไม่ใช่สำหรับสวิตช์! วิธีที่เหมาะสมในการทำเช่นนั้นคือในวิธีการ
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
ที่คำสั่งของแบบฟอร์ม
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
ปิดใช้งานการเลือกสำหรับเซลล์ที่เฉพาะเจาะจงในขณะเดียวกันก็อนุญาตให้ผู้ใช้จัดการสวิตช์และใช้ตัวเลือกที่เหมาะสม สิ่งนี้ไม่เป็นความจริงหากมีคนปิดการใช้งานการโต้ตอบกับผู้ใช้
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
วิธีการซึ่งเป็นการเตรียมเซลล์และไม่อนุญาตให้มีการโต้ตอบกับ UISwitch
ยิ่งกว่านั้นใช้วิธีการ
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
เพื่อยกเลิกการเลือกเซลล์ด้วยคำสั่งของแบบฟอร์ม
[tableView deselectRowAtIndexPath:indexPath animated:NO];
ยังคงแสดงแถวที่ถูกเลือกในขณะที่ผู้ใช้กดบน contentView ดั้งเดิมของเซลล์
แค่สองเซ็นต์ของฉัน ฉันค่อนข้างมั่นใจว่าหลายคนจะพบว่ามีประโยชน์นี้