我对iPhone编程很新,所以我的问题可能是由于完全缺乏对基本原理的了解。
我正在开发一款有两个视图的iPhone应用程序。第一个视图有两个按钮,当按下其中一个按钮时,会有一个带有tableview的模态视图弹出窗口。根据按下的按钮,此表视图的填充方式不同。如果按下按钮按钮1,则使用button1Data填充tableview。用户可以选择单元格,如果这样做,则将单元格类型设置为UITableViewCellAccessoryCheckmark。然后我将已检查单元格的名称保存到tableViewListChecked中,以便稍后可以决定在数据更改时应该检查哪个单元格。
问题如下:在取消模态视图后,我选择了button2,仍然在button2Data中选择了button1Data中选中的单元格。我很清楚,函数[theTableView reloadData]正在工作,因为数据确实发生了变化,但是在我从屏幕上滚动单元格之前,accesorytupes仍然是相同的。
P.S。如果我确实滚动了屏幕的单元格,那么就可以正确设置附件类型。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
cell.accessoryType = UITableViewCellAccessoryNone;
}
else if ([tableViewListChecked containsObject:[NSString stringWithString:cell.textLabel.text]]) {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else {
cell.accessoryType = UITableViewCellAccessoryNone;
}
cell.textLabel.text = [tableViewList objectAtIndex:indexPath.row];
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
if (![tableViewListChecked containsObject:[NSString stringWithString:cell.textLabel.text]]) {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
[tableViewListChecked addObject:[NSString stringWithString:cell.textLabel.text]];
}
else if ([tableViewListChecked containsObject:[NSString stringWithString:cell.textLabel.text]]) {
cell.accessoryType = UITableViewCellAccessoryNone;
[tableViewListChecked removeObject:[NSString stringWithString:cell.textLabel.text]];
}
}
谢谢你的帮助!
答案 0 :(得分:1)
如果单元格不是nil(如果它已从表视图中出列),那么实际上并不是这样,更改附件类型。放弃其他,即改变
else if ([tableViewListChecked containsObject:[NSString stringWithString:cell.textLabel.text]]) {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
到
if ([tableViewListChecked containsObject:[NSString stringWithString:cell.textLabel.text]]) {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
答案 1 :(得分:0)
听起来每次呈现模态视图时都会重复使用UITableView
的相同实例,在这种情况下,tableViewListChecked
数组会发生什么?您正在交换tableViewList
中的数据;但是你是否采用了一些策略来在按钮1和按钮2之间的按钮之间保留已检查项目列表?
答案 2 :(得分:0)
如果这里的人没有帮助你,你可以设置: 每次用户点击button2时,cell.accessoryType = UITableViewCellAccessoryNone