更改UITableView中所有单元格的子视图

时间:2014-01-29 12:26:19

标签: ios iphone objective-c uitableview

我正在创建一个应用程序,其中包含一个显示包含自定义单元格的表格视图的屏幕。每个单元格包含两个标签和一个子视图,其中还包含其他子视图。我正在处理单元格上的click事件以隐藏/显示单元格子视图中的子视图。我怎样才能这样做,当我点击一个单元格时,所有单元格的子视图都会改变?

就像iPhone中的Stock应用程序(使用iOS 7),这是截图:

enter image description here

如上图所示,当您点击任何绿色框时,所有框都会更改以反映相同类型的值。

请告诉我这种方法是否合适,或者如何实施。

2 个答案:

答案 0 :(得分:1)

有几种方法可以做到这一点。首先想到的是处理UITableViewCell子类中的不同状态,然后重新加载可见单元格:

[self.tableView reloadRowsAtIndexPaths:[self.tableView indexPathsForVisibleRows] withRowAnimation:UITableViewRowAnimationAutomatic];

如果您正在寻找对该过程的更多控制,那么也可以通过更改将来加载的单元格状态,然后在每个可见单元格上调用方法来实现此过程。这将为您提供一种简单的方法来完全控制单元格内容的更新方式。

// Change flag for cell state then...
for (NSIndexPath *indexPath in [self.tableView indexPathsForVisibleRows]) {
    if (condition) {
        MyCellSubclass *cell = (MyCellSubclass *)[self.tableView cellForRowAtIndexPath:indexPath];
        [cell someMethodWithArg:(id)state];
    }
}

答案 1 :(得分:1)

要在Stock应用中执行某些操作,您应该处理两个方法cellForRowAtIndexPath:并单击操作方法。

在cellForRowAtIndexPath中:您应该检查按下了哪个单元格/按钮并显示基于它的值:

//Pseudo code
//cellForRowAtIndexPath
if (cellNo3Pressed)
{
    //set up text with the right value.
}
else if (otherCell)
{
    //set up text with the right value.
}

这将处理屏幕上不可见的单元格。

下一个动作方法应该在所有可见单元格上处理好的动画:

NSArray *paths = [tableView indexPathsForVisibleRows];

for (NSIndexPath *path in paths)
{
    UITableViewCell *cell = (UITableViewCell *)[self.tableView cellForRowAtIndexPath:path];
    //Animate changes for cell
}