Jea*_*ott 38 iphone uitableview uiswitch ios
我有一个UITableViewCell与UISwitch作为accessoryView的每一个细胞.当我更改单元格中交换机的值时,如何知道交换机在哪一行?我需要切换值更改事件中的行号.
jrt*_*ton 158
标签,子类或视图层次结构导航太多了!.在您的操作方法中执行此操作:
CGPoint hitPoint = [sender convertPoint:CGPointZero toView:self.tableView];
NSIndexPath *hitIndex = [self.tableView indexPathForRowAtPoint:hitPoint];
Run Code Online (Sandbox Code Playgroud)
适用于任何类型的视图,多节表,无论你可以抛出什么 - 只要你的发送者的起源在单元格的框架内(谢谢抢!),通常就是这种情况.
这里是UITableView Swift扩展:
extension UITableView {
func indexPath(for view: UIView) -> IndexPath? {
let location = view.convert(CGPoint.zero, to: self)
return self.indexPathForRow(at: location)
}
}
Run Code Online (Sandbox Code Playgroud)
如果将tag属性设置为行号(如其他答案所示),则必须每次都更新它tableView:cellForRowAtIndexPath:(因为可以为不同的行重用单元格).
相反,当您需要行号时,您可以superview从UISwitch(或任何其他视图)向上走到UITableViewCell,然后到UITableView,并向表视图询问单元格的索引路径:
static NSIndexPath *indexPathForView(UIView *view) {
while (view && ![view isKindOfClass:[UITableViewCell class]])
view = view.superview;
if (!view)
return nil;
UITableViewCell *cell = (UITableViewCell *)view;
while (view && ![view isKindOfClass:[UITableView class]])
view = view.superview;
if (!view)
return nil;
UITableView *tableView = (UITableView *)view;
return [tableView indexPathForCell:cell];
}
Run Code Online (Sandbox Code Playgroud)
这不需要任何东西tableView:cellForRowAtIndexPath:.
| 归档时间: |
|
| 查看次数: |
16122 次 |
| 最近记录: |