获取UITableViewCell的子视图(UITextField或UILabel) - 两种方式,一种工作,一种不工作 - 为什么?

时间:2013-09-18 18:09:46

标签: iphone ios uitableview uitextfield

我通过故事板设计了UITableViewCell,其中包含UITextFieldUILabel。我想在调用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;
}

1 个答案:

答案 0 :(得分:1)

对不起。这只是我最后的一个错误,我为浪费你的时间而道歉。我重写了在Storyboard UI中设置的textField.tag的值。 (我依靠它是Storyboard中设置的值,但事实并非如此)。原始代码正确运行。仍然不确定哪种方法更好。假设特定索引或特定标签值更安全吗?这些对我来说都不安全。