0

reloadData仅在 iOS 7.1 中对我来说发生了一些奇怪的事情。此代码在 iOS 7.0 中完美运行。我更新了一些变量,然后调用reloadData

myNum = 12;
[self.tableView reloadData];

然后在cellForRowAtIndexPath

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    … 
    [cell.leftScoreButton setTitle:[NSString stringWithFormat:@"%d", myNum] forState:UIControlStateNormal];
    cell.leftScoreButton.enabled = NO;
    … 

这不再在 7.1 中正确更新按钮标题,但在 7.0 中可以正常工作。此外,如果我弹出一个 AlertDialog,那么它将成功地重新加载tableView具有正确标题的按钮。调用的哪一部分AlertDialog更新/刷新底层屏幕?我可以手动调用它而不实际弹出一个AlertDialog吗?

我已经尝试调用[self.view setNeedsDisplay]and setNeedsLayout。都没有帮助。

4

3 回答 3

3

玩了一段时间后,我注意到它与启用的按钮有关。对于没有正确更新的行,我禁用了按钮。我刚刚添加

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    … 
    [cell.leftScoreButton setTitle:[NSString stringWithFormat:@"%d", myNum] forState:UIControlStateNormal];
    cell.leftScoreButton.enabled = YES;
    cell.leftScoreButton.enabled = NO;
    … 

所以我启用然后立即禁用,现在它们可以正确更新。

于 2014-03-17T00:54:13.623 回答
0

我遇到过同样的问题。

UIControlStateNormal通过为和设置相同的标题来UIControlStateSelected解决 UIControlStateHighlighted

看起来更干净的解决方案。

于 2014-05-27T10:42:31.563 回答
0

就我而言,这段代码为我完成了工作:

[cell.buttonName setNeedsLayout];

我要求按钮再次布局。

于 2014-07-01T08:20:22.727 回答