8

我想在选择单元格后更改单元格的 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];
}
4

6 回答 6

10

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

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

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell * cell = [tableView cellForRowAtIndexPath:indexPath];
    cell.textLabel.text = @"it was tapped";
}
于 2010-04-20T04:17:24.940 回答
2

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

[单元集需要布局]

对标签进行上述更改后。

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

于 2009-12-12T06:33:40.220 回答
2

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

[yourTableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone];
于 2012-07-11T10:27:58.117 回答
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
于 2014-11-19T07:10:39.490 回答
0

创建一个新的 iPad 项目(拆分视图),现在通过 Classes->Files。那里给出了最简单的方法。XCode 的生成代码。

示例代码行:-

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

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

于 2011-02-08T06:17:03.187 回答
-1

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

[cell setNeedsDisplay];

代替

[tableView reloadData];

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

于 2009-12-10T15:50:09.170 回答