我正在构建一个应用程序,只需要列表中的一个项目为“活动”。 Active是一个更深层的概念,与列表中的选定项无关。到目前为止,我能够以正确的“活动”状态(绿点)加载表格。我无法做的是当新项目被选为“活动”时打开和关闭点。
我已经开始走KVO之路,但我想知道是否有一个干净的模式来打开和关闭表格单元格中项目的高亮状态。
提前致谢, 乔
更新 搞定了,想要显示正确的用户界面。再次感谢!
答案 0 :(得分:0)
据我所知,你的任务是为表格单元格实现自己的“活动”状态。
您可以继承 UITableViewCell ,并创建一个方法,让您轻松更改单元格的状态(如 [(MyCustomTableViewCell *)cell setActiveState:(BOOL)state] )
在您自定义的 UITableView (或它的控制器)中,您可以创建一个方法,让您将其中一个单元格设置为当前活动状态(在此方法的实现中,您可以轻松设置所有其他单元格'声明为非活动状态)。此外,您还可以使用此方法在应用中执行任何操作。
修改强> 我重新阅读了你的帖子。如果你想动态更改单元格的状态(例如,根据下载状态),那么,你可以强制你的 downloadManager (或类似的东西;我不知道,究竟什么可以改变app您应用中的模型)将一些特定消息发送到您的 tableViewController 。
答案 1 :(得分:0)
两件事:
在-tableView:cellForRowAtIndexPath:
中,在返回单元格之前,始终根据确定对象(行)的内容将图像设置为绿点或nil
是活跃的。
每当您使用新值更新数据模型时,无论哪个对象处于活动状态,始终会在表格视图上调用-reloadData
。此外,在致电-reloadData
之前,请检查是否为表格视图选择了一行。如果是,首先保存所选行的索引路径,然后重新加载表的数据,最后重新选择首先捕获的索引路径上的行(不带动画)。
如果有任何不清楚之处,请告诉我,我可以提供一些代码来帮助解释。
答案 2 :(得分:0)
全局初始化整数变量,如
"int selectedRow";
在viewDidLoad中将其初始化为
selectedRow=-1;
在您的cellforRowAtIndexPath中写下以下条件 // cellForRowAtIndexpath中的代码
if(indexpath.row==selectedRow){
[cell.dotImage=[uiimage imageNamed:"activeState.png"]];
}else{
[cell.dotImage=[uiimage imageNamed:"inActiveState.png"]];
}
在DidSelectRowAtIndexPath中 // didSelectRowAtIndexpath中的代码
selectedRow=indexpath.Row;
[tableview reloadData];
这可以像魅力一样工作