我有一个UITableView,原型单元格上有UISwitch。当用户点击任何特定单元格上的开关时,我需要确定我的数据源中的哪个对象切换了它的开关。
这是我的切换方法:
- (IBAction)completeSwitchTapped:(id)sender {
UITableViewCell *cell = (UITableViewCell *)[sender superview];
NSIndexPath *indexPath = [self.itineraryTableView indexPathForCell:cell];
NSLog(@"cell row is: %d in section: %d", indexPath.row, indexPath.section);
}
但是无论选择哪一行或哪一行,这总是会返回第0部分中的第0行。
如何正确返回包含开关的正确单元格?很明显[sender superview]
无效,我对如何引用细胞感到很茫然。
谢谢!
答案 0 :(得分:2)
尝试这样的事情:
UIView *superview = sender.superview;
while (![superview isKindOfClass:[UITableViewCell class]] && superview.superview != nil) {
superview = superview.superview;
}
NSIndexPath *indexPath = [self.itineraryTableView indexPathForCell:superview];
答案 1 :(得分:1)
创建按钮/开关时,将其标记设置为单元格行或其他有意义的值。然后在调用IBAction方法时简单地提取sender.tag
,以检索单元格行。
答案 2 :(得分:0)
当我必须在我自己的表中执行这样的按钮和开关时,我通常是UIButton或UISwitch的子类,在我的子类中,我添加了一个" .indexPath
"或" .row
"属于我的子类控件。
当我在" cellForRowInIndexPath:
"
这样,当您触摸开关或按钮时,您将拥有一个具有正确设置的行索引的属性,您可以使用它。
更直接的&不那么笨拙的解决方案与做" superview.superview
"。