当我将 UIView 子类对象添加到 UIView - 例如原型 UITableViewCell 中的 UISwitch 并通过 IBAction 将此开关与 ViewController 连接时,如何在此操作中找出调用的 UISwitch 所在的表行?
为了清楚起见,我附上了图像 - 当调用 UISwitch 时,我想知道调用的 UISwitch 在哪一行。
我认为“最干净”的方法是让开关将其动作发送到单元本身。您需要将 UITableViewCell 子类化以实现该操作,并将其传递给视图控制器上的方法(可能通过为单元格提供视图控制器所连接的委托)。这是相当的盛况;下面有更直接但不太合适的方法。
一种方法是tag
在首先配置表格视图单元格时(即在您的tableView:cellForRowAtIndexPath:
方法中)在 UISwitch 上指定 a 。类似的东西switch.tag = indexPath.row
; 然后,您可以稍后通过向交换机询问其标签来检索该行。
另一种方法是向上搜索 UISwitch 的超级视图,直到找到 UITableViewCell 然后找到它的行。就像是:
UIView *view = switch.superview;
while (view && ![view isKindOfClass:[UITableViewCell class]]) {
view = view.superview;
}
// at this point, view is nil or a table view cell; ask the table view for its index path
if (view) {
NSIndexPath *path = [tableView indexPathForCell:cell];
}