我有一个带有几个UITableViewcells(UITableViewCellStyleSubtitle)的UITableView。当用户点击其中一个单元格时,我会推送一个允许用户更改单元格文本的详细VC。当我弹出这个ViewController时,单元格上的文字显示为省略号:
之前:
后: 将文本更改为“Wartyrl”并弹出详细信息VC。
如果我点击任何其他单元格,省略号将消失并显示正确的文本。可能导致这种情况的原因是什么?
这是更改单元格文本的代码(通过委托方法):
#pragma mark - FRREditTaskViewControllerDelegate
-(void) editTaskViewController:(FRREditTaskViewController *)sender
didChangeNameForTask:(FRRFlatTask *)aTask{
NSIndexPath *idx = [NSIndexPath indexPathForRow:[self.pendings indexOfObject:aTask] inSection:0];
[self.tableView cellForRowAtIndexPath:idx].textLabel.text = aTask.name;
}
顺便说一句,这个代码在弹出详细信息VC之前被称为,而UITableViewController仍然是隐藏的。我不知道这是否相关。
答案 0 :(得分:2)
创建单元格时,UILabel仅足以处理初始文本(它不会动态调整大小)。更改文本后调用[self.tableView reloadData]
(didChangeNameForTask
方法结束)应该可以正常显示。
答案 1 :(得分:2)
您可以拨打[cell.textLabel sizeToFit]
。
在许多情况下,更新内部数据并致电reloadRowsAtIndexPaths:withRowAnimation:
更清晰。这样你就没有那么多的东西用细胞的实现细节进行编辑(当你改变主意思考如何铺开它时)。它还可以确保您的实际数据与单元格匹配。
在大多数情况下,即使更好也是要创建一个名为UITableViewCell
的{{1}}子类。您将其设为TaskTableViewCell
,并使用KVO观察Task
,管理自己的布局(包括在需要时调用Task
)。这样,您不需要委托方法来告诉您何时更新。当任务更改时,单元格会自动更新。这会将所有布局问题移动到单元类中,并移出数据源。
答案 2 :(得分:1)
似乎 textLabel 在调整宽度时犹豫不决。如果它太强烈无法更改,只需使用[tableView reloadData]
直接重新加载tableView。
如果您不想重新加载整个tableView,则只需重新加载下面的特定单元格。
NSIndexPath *idx = [NSIndexPath indexPathForRow:[self.pendings indexOfObject:aTask] inSection:0];
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:idx] withRowAnimation:UITableViewRowAnimationFade];
当更改单元格的 textLabel 文本时,这将显示一个漂亮的淡入淡出动画。
答案 3 :(得分:1)
-(void) editTaskViewController:(FRREditTaskViewController *)sender
didChangeNameForTask:(FRRFlatTask *)aTask{
NSIndexPath *idx = [NSIndexPath indexPathForRow:[self.pendings indexOfObject:aTask] inSection:0];
UITableViewCell *thiscell=[self.tableView cellForRowAtIndexPath:idx];
thiscell.textLabel.text =[nsstring stringwithFormat:@"%@",aTask.name];
[self.tableView reloadRowsAtIndexPaths: [NSArray arrayWithObject:idx] withRowAnimation:NO];//if u dont want to use reload data then use like this or use
//- (void)reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation
}