无法获取 UITableViewCell 的索引路径

Posted

技术标签:

【中文标题】无法获取 UITableViewCell 的索引路径【英文标题】:Unable to get index path of a UITableViewCell 【发布时间】:2017-01-04 06:33:07 【问题描述】:

我有一个表格视图,其中包含使用autolayout 构建的动态单元格。我有一个 UITextView 作为 UITableViewCell 内的子视图。这个UITextView 可以垂直增长,即此文本视图禁用滚动,并且它的高度约束等于单元格内容视图的高度。因此,每当 textview 高度增加时,相应单元格的高度也会增加。

我需要获取任何给定单元格的索引路径。 当 textview 高度高于屏幕高度时,indexPathForCell 返回 nil。我也试过indexPathForRowAtPoint:[cell center] 它也返回零。我无法从模型单元格数组中获取索引路径,因为模型没有我的单元格(单元格已从模型数组中删除)。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
      NSMutableArray *cellArray = [tableViewCellsDictionary objectForKey:[NSNumber numberWithUnsignedLong:sectionIndex]];
      return [cellArray objectAtIndex:rowIndex];
  

-(void) updateTextViewTextInCell:(CustomCell *) cell 
      NSIndexPath *currentCellIndexPath1 = [tableView indexPathForCell:cell];  // Returns nil
      NSIndexPath *currentCellIndexPath2 = [tableView indexPathForRowAtPoint:[cell center]]; // Returns nil

我从textViewDidEndEditing 调用这个updateCellTextView 方法来将textview 的文本保存在我的模型中。

但我无法获取单元格的索引路径。

如何在这种情况下获取单元格的索引路径,即当单元格完全超出屏幕时。

【问题讨论】:

不要让人猜。使用实际的相关代码更新您的问题。 代码不够。发布包含该行的整个方法。包括任何其他相关详细信息。 @JafferSheriff 你能把你想要cell的indexPath的方法贴出来吗?还有cellForRow 你为什么不使用正确的单元出列? 我的单元格的用户界面彼此差别很大,而且它们也不是对称的,所以我使用静态单元格数组。 【参考方案1】:

如果你想得到textViewDidEndEditing中单元格的indexpath,你可以使用这个代码。

 CGPoint point = [textView convertPoint:CGPointZero toView:self.tableview];
 NSIndexPath *indexPath = [self.tableview indexPathForRowAtPoint:point];

【讨论】:

【参考方案2】:

显然你永远不会得到indexpath 这样的单元格,因为这仅适用于UItableViewDelegates and UItableViewDatasource methods

据我了解,现在您需要知道哪个UITextView 用户正在结束发短信。所以更好的方法之一如下:

    cellForRow

cell.textView.tag = indexPath.row

在这里,您已将标签分配给textView,它等同于其indexpath.row。现在,当您谈论textView.tag 时,它会为您提供该特定单元格的textView,而textView.tag 是您拥有的特定单元格TextView

    - (BOOL)textViewShouldBeginEditing:(TextView *)textView

    textView.tag // gives you indexPath.row of the textview where user ends editing
    

注意:如果您在UItableView 中有UITextView/UItextfield,那么只要您的单元格离开屏幕,它的值就会丢失。因此,要解决这个问题,请使用字典将 UITextView/UItextfield 的每个值保存在 TextdidChange Method 中。

希望你现在明白了。

【讨论】:

我也必须处理单元格的删除。因此,根据您的解决方案,我必须在每次删除期间将单元格的tag 重新分配给 textview 的标签。所以它添加了这样的并发症 若要删除,请发送至您的cell.btnDelete = indexPath.section(假设您必须删除完整部分)。在btnDelete:(UIButton*)sender 上:1) 从字典中删除该部分的数据,即该部分的UITextView 2) 减少您的numberOfSection 3) 重新加载UITableView. @JafferSheriff 注意:您必须正确维护字典中的UITextVIew 数据,这样每当您重新加载tableView 时,正确的数据就会出现在其各自的@987654346 中@

以上是关于无法获取 UITableViewCell 的索引路径的主要内容,如果未能解决你的问题,请参考以下文章

在自定义 UITableViewCell 中按下 UIButton 时如何获取 indexPathForSelectedRow

无法分配给 UITableViewCell 中的“accessoryType”

在 UITableViewCell 中获取自定义单元格的高度

Python之路-------引路篇

grub 引导-系统引路人

如何在 UITableViewCell 上显示数组数据?