无法获取 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”