我正在创建一个应用程序,其中包含一个显示包含自定义单元格的表格视图的屏幕。每个单元格包含两个标签和一个子视图,其中还包含其他子视图。我正在处理单元格上的click事件以隐藏/显示单元格子视图中的子视图。我怎样才能这样做,当我点击一个单元格时,所有单元格的子视图都会改变?
就像iPhone中的Stock应用程序(使用iOS 7),这是截图:
如上图所示,当您点击任何绿色框时,所有框都会更改以反映相同类型的值。
请告诉我这种方法是否合适,或者如何实施。
答案 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
}