我通过故事板设计了UITableViewCell
,其中包含UITextField
和UILabel
。我想在调用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;
}
答案 0 :(得分:1)
对不起。这只是我最后的一个错误,我为浪费你的时间而道歉。我重写了在Storyboard UI中设置的textField.tag的值。 (我依靠它是Storyboard中设置的值,但事实并非如此)。原始代码正确运行。仍然不确定哪种方法更好。假设特定索引或特定标签值更安全吗?这些对我来说都不安全。