从子视图中引用包含 UIView?
Posted
技术标签:
【中文标题】从子视图中引用包含 UIView?【英文标题】:Referencing containing UIView from a subview? 【发布时间】:2012-07-07 13:57:36 【问题描述】:当我将 UIView 子类对象添加到 UIView - 例如原型 UITableViewCell 中的 UISwitch 并通过 IBAction 将此开关与 ViewController 连接时,如何在此操作中找出调用的 UISwitch 所在的表行?
为了清楚起见,我附上了图片 - 当调用 UISwitch 时,我想知道调用的 UISwitch 在哪一行。
【问题讨论】:
【参考方案1】:我认为“最干净”的方法是让开关将其动作发送到单元本身。您需要继承 UITableViewCell 以实现该操作,并将其传递给视图控制器上的方法(可能通过为单元格提供视图控制器所连接的委托)。这是相当的盛况;下面有更直接但不太合适的方法。
一种方法是在首先配置表格视图单元格时(即在您的tableView:cellForRowAtIndexPath:
方法中)在 UISwitch 上指定一个tag
。 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];
【讨论】:
我刚刚发现第一种方法不适用,因为单元格可重用。 只要每次从tableView:cellForRowAtIndexPath:
返回单元格时都将标签分配给开关,第一种方法应该可以很好地重复使用以上是关于从子视图中引用包含 UIView?的主要内容,如果未能解决你的问题,请参考以下文章