从 NSIndexPath 获取 UITableViewCell?
Posted
技术标签:
【中文标题】从 NSIndexPath 获取 UITableViewCell?【英文标题】:get UITableViewCell from NSIndexPath? 【发布时间】:2015-07-14 10:54:08 【问题描述】:我在单个viewController
中使用多个UITableView
和自定义单元格。自定义单元格有textFields
,我可以编辑文本字段。现在我想在编辑 textField 时在 textField
委托方法中获得精确的 UITableView
的 tableViewCell ?
请记住,有多个 tableViews 我想获取正在编辑的确切表格的确切单元格。有什么帮助吗?
【问题讨论】:
我会建议循环到上层视图,直到你得到一个 uitableviewcell 的实例,然后检查它是否是你的自定义类 我建议视图控制器只管理一个表视图。 在你的两个表视图中都有文本字段?? 【参考方案1】:你的两个tableview
都必须有tag在文本字段委托中使用下面的代码
UITableViewCell *cell = (UITableViewCell *) textField.superview.superview.superview;
UITableView *curTableView = (UITableView *)cell.superview;
NSIndexPath *indexPath = [curTableView indexPathForCell:cell];
【讨论】:
这是一个非常糟糕的主意。如果 Apple 更改了视图层次结构,您的应用程序将无法运行(他们之前已经这样做过)。【参考方案2】:永远不要遍历超级视图,正确且最可靠的方法是:
CGPoint textViewPosition = [textView convertPoint:CGPointZero toView:self.tableView];
CGRect senderFrame = CGRectMake(textViewPosition, textViewPosition, textView.frame.size.width, textView.frame.size.height);
NSArray *indexPaths = [self.tableView indexPathsForRowsInRect:senderFrame];
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:[indexPaths firstObject];
这可能会变得更复杂,因为您在 1 个视图中有不同的表视图,我建议重新考虑为什么您有多个表视图,看看您是否不能以更有效的方式执行此操作,即 1 个带有自定义部分的表视图等等……
【讨论】:
这种情况在这段代码中是不可能的,因为在 textfield 方法中我们不知道 [textView convertPoint:CGPointZero toView:self.tableView] 的 tableview; 您需要重新构建您的代码,以便委托位于正确的位置。以上是关于从 NSIndexPath 获取 UITableViewCell?的主要内容,如果未能解决你的问题,请参考以下文章
UICollectionView 获取两个 NSIndexPath 对象之间的范围