【问题标题】:Referencing containing UIView from a subview?从子视图中引用包含 UIView?
【发布时间】:2012-07-07 13:57:36
【问题描述】:

当我将 UIView 子类对象添加到 UIView - 例如原型 UITableViewCell 中的 UISwitch 并通过 IBAction 将此开关与 ViewController 连接时,如何在此操作中找出调用的 UISwitch 所在的表行?

为了清楚起见,我附上了图片 - 当调用 UISwitch 时,我想知道调用的 UISwitch 在哪一行。

【问题讨论】:

    标签: ios xcode cocoa uiview subview


    【解决方案1】:

    我认为“最干净”的方法是让开关将其动作发送到单元本身。您需要继承 UITableViewCell 以实现该操作,并将其传递给视图控制器上的方法(可能通过为单元格提供视图控制器所连接的委托)。这是相当的盛况;下面有更直接但不太合适的方法。

    一种方法是在首先配置表格视图单元格时(即在您的tableView:cellForRowAtIndexPath: 方法中)在 UISwitch 上指定一个tagswitch.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];
    }
    

    【讨论】:

    • 我刚刚发现第一种方法不适用,因为单元格可重用。
    • 只要每次从tableView:cellForRowAtIndexPath:返回单元格时都将标签分配给开关,第一种方法应该可以很好地重复使用
    猜你喜欢
    • 2014-11-19
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多