编辑UITableViewCells的不可见行

时间:2012-03-28 13:19:40

标签: iphone ios uitableview

我正在开发一款应用,我希望通过更改单元格的图像视图来打开/关闭某些设备的状态。我在桌面视图中有我的设备,我在按钮点击时设置表格视图的编辑模式,编辑正常,但问题是它只更改当前可见的单元格的图像,无论是否我之前选择了一些目前看不到的行。这是我的代码。告诉我我缺少什么,或者我应该怎么做才能更改不可见的选定行。

- (void)viewDidLoad{
deviceTableVIew.rowHeight = 72.0;
[deviceTableVIew setAllowsSelectionDuringEditing:YES];
[deviceTableVIew setAllowsMultipleSelectionDuringEditing:YES];

self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"mainBackground.jpg"]];
btnControl.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"btn-conrol.png"]];  
[super viewDidLoad];
}

-(IBAction)control:(id)sender{
btnControl.enabled = false;
btnControl.hidden = true;        
btnCancel.enabled = true;
btnCancel.hidden = false;    
stateToggleToolbar.hidden = false;    
[self.deviceTableVIew setEditing:YES animated:YES];
}

-(IBAction)setDevicesOn:(id)sender{

NSArray *paths = [self.deviceTableVIew indexPathsForSelectedRows];
for (NSIndexPath *path in paths) {
    UITableViewCell *cell = (UITableViewCell *)[self.deviceTableVIew cellForRowAtIndexPath:path];
    cell.imageView.image = [UIImage imageNamed:@"device-on-image.png"];
}

controlStatus = NO;        
btnControl.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"btn-conrol.png"]];        
stateToggleToolbar.hidden = true;
}

2 个答案:

答案 0 :(得分:2)

表视图不会为每一行维护单元格。滚动时,离开视图的单元格将被回收并用于进入视图的单元格。

每个单元格的“设备开启”状态不应仅存储在单元格的图像中。对于维护该状态的每一行(或状态数组等),您应该有一个模型对象。因此,在cellForRowAtIndexPath:中,您可以正确设置即将进入视图的单元格。

答案 1 :(得分:1)

(我假设你有一个自定义对象或字典的数组,其中包含填充单元格的信息。)

更好的策略是让你的setDevicesOn:方法更新该数据模型以指示你想要显示的图像,并在完成时调用reloadData。然后,当调用cellForRowAtIndexPath:时,您可以根据该数据元素设置单元格的实际图像。