当选择UITableViewCell时,如何更改textLabel?

时间:2009-12-03 22:09:51

标签: iphone uitableview didselectrowatindexpath

我想在选择单元格时更改单元格的textLabel和detailTextLabel。 我尝试了以下内容,但没有发生任何变化:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    MyAppDelegate *appDelegate = (MyPhoneAppDelegate*)[[UIApplication sharedApplication] delegate];

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    cell.detailTextLabel.text = @"xxxxx";
    cell.textLabel.text =       @"zzzzz";
    [tableView reloadData];
}

6 个答案:

答案 0 :(得分:10)

我同意,重新加载表格视图实际上会使用tableView:cellForRowAtIndexPath:转储并重新加载/显示所有单元格并使用原始数据,而不是{{1}中更新的@“xxxxx”和@“yyyyy”方法。

在一个小小的测试项目中,我能够在选择时更改标签:

tableView:didSelectRowAtIndexPath:

答案 1 :(得分:2)

选择单元格时,不应尝试重新加载表格。相反,尝试

  

[cell setNeedsLayout]

对标签进行上述更改后。

另外,您是否有理由在方法中引用应用程序委托?

答案 2 :(得分:2)

尝试重新加载您选择的单元格(由indexPath描述):

[yourTableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone];

答案 3 :(得分:0)

创建一个新的iPad项目(拆分视图),现在浏览Classes->文件。那里最简单的方法。 XCode的生成代码。

示例代码行: -

cell.textLabel.text = [NSString stringWithFormat:@"Row %d", indexPath.row];

您可以在cellForRowAtIndexPath ||&& didSelectRowAtIndexPath ..

中使用它们

答案 4 :(得分:0)

不确定您尝试对委托做什么,但是您应该尝试调用已经实例化的tableView;即致电

UITableViewCell *cell = [self.tableView cellForRowAtIndexPath: indexPath];

也许我不清楚 我所说的是你正在实例化一个新的空表视图

UITableViewCell *cell = [**tableView** cellForRowAtIndexPath: indexPath]; //cell has nothing it is new.

考虑替换以调用旧的

UITableViewCell *cell = [**self.tableView** cellForRowAtIndexPath: indexPath]; //now you have one that has a textField already in it

答案 5 :(得分:-1)

您是否尝试仅刷新所选单元格而不是重新加载整个表格?

[cell setNeedsDisplay];

而不是

[tableView reloadData];

这将有更好的性能,我不是,但我想如果刷新整个表格,选择就会丢失(这可能是你最终看不到任何变化的原因)....