【发布时间】:2013-09-18 18:09:46
【问题描述】:
我有一个通过包含UITextField 和UILabel 的情节提要设计的UITableViewCell。我想在调用cellForRowAtIndexPath 时更新这些视图的值。
我首先尝试像这样获取对文本字段和标签的引用:
UITextField *textfield = (UITextField*)[cell.contentView viewWithTag:10];
UILabel *label = (UILabel*)[cell.contentView viewWithTag:20];
这适用于 UILabel,但我只能在第一次创建单元格时获得对 UITextField 的引用,我能够设置原始值 (textField.text) 但从未更新它。如果我检查子视图数组,我可以看到UITextField 在那里,我只是无法使用viewWithTag 来处理它。我切换到这个(下),它的工作原理:
UITextField* textField = [[cell.contentView subviews] objectAtIndex:0];
UILabel *label = [[cell.contentView subviews] objectAtIndex:1];
为什么第一种方法不起作用?这样做的正确方法是什么?
这段代码的上下文是:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*) indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"DetailCell" forIndexPath:indexPath];
UITextField* textField = [[cell.contentView subviews] objectAtIndex:0];
textField.text = @"<something>";
UILabel *label = [[cell.contentView subviews] objectAtIndex:1];
label.text = @"<something else>";
return cell;
}
【问题讨论】:
-
您的代码未显示您在视图上设置标签的位置。还有你想要达到的目标是什么?您何时需要访问这些字段?在输入它们之后或在按下保存按钮或其他什么之后立即?有更好的方法来做到这一点。
-
@Rog 使用其中一个检查器在 Storyboard 中设置标签值。我有一个带有单元格的表格,单元格有文本字段。当用户在其中一个文本字段中输入值时,我想更新其他单元格中文本字段的值以反映这一点。
-
您意识到
cellForRowAtIndexPath仅在创建单元格或系统需要使单元格出列(即滚动表格视图)时调用?从您的描述来看,您只有一个或少数几个单元格,因此为什么您无法通过该方法更新文本字段,因为它再也不会被调用。您应该改为实现textFieldDidEndEditing委托方法并从那里获取/更新您的文本字段。 -
我使用
textFieldDidEndEditing检测到文本字段中的值已更改,然后我更新数据源(它具有所有文本字段的值)并告诉表刷新。在刷新期间,我希望cellForRowAtIndexPath被调用并且我可以在其中更新文本字段的值。我想我以某种方式失去了标签的价值,我有一个想法要检查!感谢您的 cmets!
标签: iphone ios uitableview uitextfield