如何使用已点击的开关确定单元格的indexPath?

时间:2014-05-09 23:34:55

标签: ios uitableview uiswitch

我有一个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]无效,我对如何引用细胞感到很茫然。

谢谢!

3 个答案:

答案 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"。