所以从技术上讲,它不是 UISwitch,而是具有自定义类的 UIView,其行为就像 UISwitch ( https://github.com/domesticcatsoftware/DCRoundSwitch )
我在表格的每一行都使用这个 DCRoundSwitch。我想获取 DCRoundSwitch 所在行的 indexPath,但它一直返回 null。
以下是 DCRoundSwitch 的配置方式(使用 Value Changed):
这是我的 togglePublic 方法:
-(void)togglePublic:(UIControl *)button withEvent:(UIEvent *)event {
DCRoundSwitch *switch1 = (DCRoundSwitch *)button;
UITableViewCell *cell = (UITableViewCell *)switch1.superview;
NSIndexPath *indexPath = [self.tableview indexPathForCell:cell];
NSLog(@"PUBLICSWITCH PRESSED %@", indexPath);
//NSIndexPath * indexPath = [self.tableview indexPathForRowAtPoint:[[[event touchesForView: button] anyObject] locationInView: self.tableview]];
if ( indexPath == nil ){
return;
}
AHBContact *contact = [self.contacts[indexPath.section] allValues][0][indexPath.row];
NSLog(@"Public switch toggled for: %@", contact);
}
如您所见,indexPath 返回 nil,因为 if 语句总是在我们到达“Public switch toggled for:”日志消息之前返回方法。