我有一个表视图单元格,其中有许多行带有UITextView。在那些UITextView中,用户可以输入值。
我遇到的问题是,如果我想在隐藏行时获取行的值,我会得到nil。
NSString *cellValue = ((UITextField *)[[[self.table cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1]] contentView] viewWithTag:[self.table cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1]].tag]).text;
我正在考虑保存用户在UITextField中输入的值,但如果用户单击执行计算的行,则不会调用委托textFieldDidEndEditing。
我不知道如何以安全的方式获得这些价值。
答案 0 :(得分:4)
您应该定位UITableView后面的数据源。 UITableView只是一种显示机制,而不是获取数据的主要资源。您可以根据标题获取单元格的索引,但是我会查看数据源以获取您的实际数据。更好的是,如果可能的话,我只会处理针对数据源本身的所有操作。最初构建表时,您的数据源是某种类型的列表或数组,我确信您可以使用它。您可能需要在视图上创建一个变量并在那里保留列表/数组以确保您拥有它并且您应该全部设置。
祝你好运!
答案 1 :(得分:1)
如上所述,您通常会使用UITableView
数据源来访问它。
那就是说,你可能没有看到你期望的数据,因为你正在使用出列的单元格。如果单元格数量很少,您可以考虑在NSDictionary
中缓存您自己的单元格,其中键是部分和行的某种组合,并通过您自己的缓存访问它们的视图层次结构。
答案 2 :(得分:0)
最有可能发生的是您重复使用的细胞。因此,当带有文本字段的单元格离开屏幕时,它会被重用,因此您无法再访问它。您需要做的是在输入文本字段后立即将值存入文本字段并将其存储在某处。您可以使用– textField:shouldChangeCharactersInRange:replacementString:
,这样当用户在文本字段中输入字符时,您可以保存字符串。
答案 3 :(得分:0)
您可以直接引用tableView
的{{1}}所需的dataSource
来访问当前未显示的行。
您可以通过执行此类操作(使用 Swift 3 )来实现此目的:
IndexPath