我正在尝试在UITableView(放置在弹出视图中)中选择的行中设置复选标记。其实我有这样的事情:
-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// Check if current row is selected
Boolean isNowChecked = NO;
if([self.tableView cellForRowAtIndexPath:indexPath].accessoryType == UITableViewCellAccessoryCheckmark)
{
isNowChecked = YES;
}
if(isNowChecked)
{
[self.tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryNone;
}
else
{
[self.tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryCheckmark;
}
return indexPath;
}
结果我能够选择行,例如我触摸第一项然后我看到勾选标记。当我向下滚动表格视图时,我看到我还检查了其他项目(编号17,22)。当我取消选中我的第一个项目时,每个检查也会消失。
你有什么建议可以解释这种情况,我该如何避免呢?
答案 0 :(得分:8)
//试试这个 //在.h
NSMutableArray *arr_fortable;
//在.m
- (void)viewDidLoad
{
[super viewDidLoad];
arr_fortable = [[NSMutableArray alloc] init];
for (int i =0; i<5; i++)
{
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:[NSString stringWithFormat:@"%d",i+1] forKey:@"data"];
[dict setObject:@"0" forKey:@"checkmark"];
[arr_fortable addObject:dict];
}
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
return [arr_fortable count];
}
- (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];
}
// Configure the cell...
cell.textLabel.text = [[arr_fortable objectAtIndex:indexPath.row] objectForKey:@"data"];
if ([[[arr_fortable objectAtIndex:indexPath.row] objectForKey:@"checkmark"] integerValue] == 1)
{
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else
{
cell.accessoryType = UITableViewCellAccessoryNone;
}
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if ([[[arr_fortable objectAtIndex:indexPath.row] objectForKey:@"checkmark"] integerValue] == 1)
{
[[arr_fortable objectAtIndex:indexPath.row] setObject:@"0" forKey:@"checkmark"];
}
else
{
[[arr_fortable objectAtIndex:indexPath.row] setObject:@"1" forKey:@"checkmark"];
}
[self.tableView reloadData];
}
答案 1 :(得分:1)
看到这个..
tableView:didSelectRowAtIndexPath:并更新在tableView中检查的数据:cellForRowAtIndexPath:像这样:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// do usual stuff here including getting the cell
// determine the data from the IndexPath.row
if (data == self.checkedData)
{
cell.accessoryType = UITableViewCellAccessoryCheckmark;
} else {
cell.accessoryType = UITableViewCellAccessoryNone;
}
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// determine the selected data from the IndexPath.row
if (data != self.checkedData) {
self.checkedData = data;
}
[tableView reloadData];
}