0

我正在构建一个应用程序,该应用程序只需要列表中的一项“活动”。活动是一个更深层次的概念,与列表中的选定项目无关。到目前为止,我能够以正确的“活动”状态(绿点)加载表格。我无法做的是在将新项目选择为“活动”时打开和关闭这些点。

我已经开始了 KVO 的道路,但我想知道是否有一个干净的模式来打开和关闭表格单元格中项目的突出显示状态。

状态灯

在此先感谢,乔

更新: 让它工作并希望显示正确的用户界面。再次感谢!

状态灯

4

3 回答 3

0

据我了解,您的任务是为表格单元格实现您自己的“活动”状态。

您可以继承 UITableViewCell,并创建一个可以让您轻松更改单元格状态的方法(例如[(MyCustomTableViewCell*)cell setActiveState:(BOOL)state])。

在您自定义的UITableView(或它的控制器)中,您可以创建一个方法,让您将一个单元格设置为当前处于活动状态(在此方法的实现中,您可以轻松地将所有其他单元格的状态设置为非活动状态)。您也可以通过此方法对您的应用程序做任何您想做的事情。

编辑: 我已经重新阅读了你的帖子。如果您想动态更改单元格的状态(例如,根据下载状态),那么您可以强制您的downloadManager(或类似的东西;我不知道,究竟什么可以改变您的应用程序中的应用程序模型)发送给您的tableViewController一些特定的消息。

于 2013-07-30T06:26:44.750 回答
0

两件事情:

  1. -tableView:cellForRowAtIndexPath:中,在返回单元格之前,始终将图像设置为绿点或nil基于确定对象(行)是否处于活动状态的任何内容。

  2. 每当您使用任何活动对象的新值更新数据模型时,请始终调用-reloadData表视图。此外,在调用之前-reloadData,请检查是否为表格视图选择了一行。如果是,首先保存选中行的索引路径,然后重新加载表的数据,最后在你先抓取的索引路径处重新选中行(无动画)。

如果有任何不清楚的地方,请告诉我,我可以提供一些代码来帮助解释。

于 2013-07-30T07:04:32.083 回答
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"]];
}

In DidSelectRowAtIndexPath //didSelectRowAtIndexpath 中的代码

selectedRow=indexpath.Row;
[tableview reloadData];

这可以像魅力一样工作

于 2013-07-30T07:04:47.153 回答