2010-08-13 84 views
2

所以我设置一个活动指标作为我的表格视图单元格上的附件视图时,他们被选中。稍后删除UITableViewCell的accessoryView?

UITableViewCell *cell = [tableVw cellForRowAtIndexPath:indexPath]; 
UIActivityIndicatorView *act = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
[act startAnimating]; 
[cell setAccessoryView:act]; 
[act release]; 

后来,当我有我需要移动的数据,我想在我过渡到另一种观点,使细胞恢复到它的默认状态来消除这种活动的指标。以下只是不起作用。

UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:self.tableView.indexPathForSelectedRow]; 
[cell.accessoryView removeFromSuperview]; 
[cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator]; 
+0

你试过没有removeFromSuperview线? 什么是你的tableView的名称?在第一个代码块中,你有与第二个代码块不同的东西。这可能是一个问题,如果它不是复制/粘贴错误。 – 2010-08-13 21:18:49

+1

获取对单元格本身的引用并删除附件视图将不起作用。 (首先,你不想删除附件视图,只需将它设置为“无”应该可以)。你需要通过调用'reloadRowsAtIndexPaths:'来告诉表视图来重绘单元格。 – 2010-08-13 21:25:40

+0

@anschuchimala - 谢谢。这是其中的一部分。将其设置为零似乎有所帮助,但活动视图不会消失,并且会更改回默认单元格附件,直到选中另一行。 reloadRowsAtIndexPaths似乎没有做任何事情 – 2010-08-13 21:49:47

回答

0

您应该有某种方法来确定对象是否需要tableView:cellForRowAtIndexPath:中的活动指示符。例如,维护一个字典或数组,用于存储索引路径上的单元格是否仍在执行某项操作,或创建一个模型对象,其中包含表示其是否正在加载的属性等。

在您的tableView:cellForRowAtIndexPath:中,检查该索引路径上的单元格是否需要活动指示器视图,如果没有,请将单元格的accessoryView设置为nil

然后删除以后附属视图: [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:theIndexPath] withRowAnimation:UITableViewRowAnimationNone];

+0

看起来像他们试图触摸开始活动指标,然后在下一个视图出现之前摆脱它,因此在cellForRowAtIndexPath中启动指标似乎不合逻辑。 – 2010-08-13 21:27:13

+0

正确,单元不需要活动视图作为附件,直到该行被选中。我在后台获取一些数据,当它返回时,我希望单元恢复正常。 – 2010-08-13 21:50:57

+0

不,您需要在cellForRowAtIndexPath中设置单元格(您不一定必须先启动活动指示器,如果需要,可以在'didSelectRowAtIndexPath:'中启动它)。否则,如果表视图重新加载单元格(如果它滚动离屏和回收等),你会遇到问题。您需要对模型进行更改,并通过重新加载已更改的索引路径上的行来更新视图以反映这些更改。 – 2010-08-13 22:09:41

相关问题