我想在选择单元格时更改单元格的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];
}
答案 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];
这将有更好的性能,我不是,但我想如果刷新整个表格,选择就会丢失(这可能是你最终看不到任何变化的原因)....