0

根据用户输入,我需要从我的表格视图的一个单元格中删除披露 V 形。在控制器的viewDidAppear方法中,我有以下代码:

NSIndexPath *section0Row10 = [NSIndexPath indexPathForRow:10 inSection:0];
[[self.tableView cellForRowAtIndexPath:section0Row10] setAccessoryType:UITableViewCellAccessoryNone];

什么都没发生。我会很感激知道我做错了什么。

更新:

这些是单个部分中的静态分组单元。UILabel我使用情节提要构建了表格视图,并通过控制从表格视图拖动到视图控制器的头文件中,将我需要以编程方式更改的每个字段(通常是 s)设置为命名的 outlets。

例如,我有:

@property (weak, nonatomic) IBOutlet UILabel *symbolLabel;  

在我的视图控制器的 .h 文件中。在 .m 文件中,我在viewDidAppear方法中包含以下行:

self.symbolLabel.text = self.dataSource.symbol;

这样一来,我就完全不需要实现cellForRowAtIndexPath:了。这是不正确的做事方式吗?

另外:当表格视图出现时,我要删除其 V 形的单元格位于屏幕底部下方。

感谢您的所有帮助和耐心。

4

5 回答 5

1

当您的单元格未显示在屏幕上时,cellForRowAtIndexPath返回nil。这是合乎逻辑的:重用单元格以节省内存,因此不必显示的单元格只需重新排队,以便它们属于当前可见的索引路径。

为了解决这个问题,不要从外部显式设置单元格的显示样式,而是将其设置在

tableView:cellForRowAtIndexPath:

方法。您可以将附件类型的数值或基于的条件存储在 NSArray 中。

于 2012-07-07T22:23:10.493 回答
0

重新加载表。或者更好,只是那个细胞。

于 2012-07-07T21:39:13.813 回答
0

代替

{
NSIndexPath *section0Row10 = [NSIndexPath indexPathForRow:10 inSection:0];
[[self.tableView cellForRowAtIndexPath:section0Row10] setAccessoryType:UITableViewCellAccessoryNone];`
}

和,

NSIndexPath *section0Row10 = [NSIndexPath indexPathForRow:10 inSection:0];
[[self tableView:self.tableView cellForRowAtIndexPath:section0Row10] setAccessoryType:UITableViewCellAccessoryNone];

你没有调用你的实现CellForRowAtIndexPath:......这就是问题所在:)

于 2013-07-08T12:56:08.040 回答
0

尝试重新加载单元格:

[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:section0Row10] withAnimation:UITableViewRowAnimationAutomatic];
于 2012-07-07T21:41:19.453 回答
0

我相信您需要调用@max_ 提到的重新加载功能

[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:section0Row10] withAnimation:UITableViewRowAnimationAutomatic];

但是当您调用它时,它将使用您的cellForRowAtIndexPath方法来获取要加载的新单元格。因此,您需要确保从该方法返回的单元格,对于您在 reload 方法中指定的索引路径,没有accessoryView.

也许在你的 cellForRowAtIndexPath 方法中设置一个断点,看看触发重新加载后会发生什么。

于 2012-07-07T22:22:18.510 回答