如何编码以选择带有复选标记的多行?

Posted

技术标签:

【中文标题】如何编码以选择带有复选标记的多行?【英文标题】:how to code to select multiple row with check mark? 【发布时间】:2014-04-10 05:00:26 【问题描述】:

我已经使用了 UITableView。我想在行上使用复选标记。 When row is selected check mark should show there and when he selects check mark row then check mark should disappear. 我使用了以下代码。

仅在我的代码中,我选择了多行,但能够在与所选行相同的复选标记上消失。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    //if (cell == nil) 
    cell.selectionStyle=UITableViewCellSelectionStyleNone;
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];

    cell.textLabel.text=[[gmailList objectAtIndex:indexPath.row]valueForKey:@"Name"];

    if(cell.selected)
    
        cell.accessoryType = UITableViewCellAccessoryCheckmark;

    
    else
    
        cell.accessoryType = UITableViewCellAccessoryNone;
    

    // Configure the cell...

    return cell;

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

    // Uncheck the previous checked row
    UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath];

    if(cell.selected)
    
        cell.accessoryType = UITableViewCellAccessoryNone;

        cell.selected=FALSE;

    
    else
    
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
              cell.selected=TRUE;
    



【问题讨论】:

你试过了吗:- (void) tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath 您好,先生,但是要在此编码什么 在 didSelectRowAtIndexPath 中取消选中的代码 我可以随机选择多行,但是当我单击复选标记已经存在的位置时,复选标记不会消失 删除复选标记[self.tableView reloadData] 后尝试重新加载。在目标 C 中也是 YES 或 NO 而不是 true 或 false 【参考方案1】:
- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath*)indexPath
    if ([tableView tag]==2)
    self.clearCheckMark = false;
    if ([tableView cellForRowAtIndexPath:indexPath].accessoryType  ==UITableViewCellAccessoryCheckmark)
   
    [tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryNone;
        
        else
        
        [tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryCheckmark;
        
        self.index = [tableView indexPathsForSelectedRows];

        
      return indexPath;

【讨论】:

我认为这对 OP 和进一步的访问会更有帮助,当您为您的意图添加解释时。 是的。你在哪里使用 self.index @user3721098 ?【参考方案2】:
Try this- You have to define a global NSMutableDict and use that dict as below

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    //if (cell == nil) 
    cell.selectionStyle=UITableViewCellSelectionStyleNone;
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
    cell.textLabel.text=[[gmailList objectAtIndex:indexPath.row]valueForKey:@"Name"];
    if([[dict objectForKey:[NSString stringWithFormat:"%d",indexPath.row]] isEqualToString:@"YES"])
    
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    
    else
    
        cell.accessoryType = UITableViewCellAccessoryNone;
    
    // Configure the cell...
    return cell;

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

    // Uncheck the previous checked row
    UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath];
    if(cell.selected)
    
        cell.accessoryType = UITableViewCellAccessoryNone;
        [[dict setObject:@"NO"]] forKey:[NSString stringWithFormat:"%d",indexPath.row];
        cell.selected=FALSE;
    
    else
    
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
              cell.selected=TRUE;
        [[dict setObject:@"YES"]] forKey:[NSString stringWithFormat:"%d",indexPath.row];
    

【讨论】:

【参考方案3】:

使用下面的方法使用“isChecked”、“YES”或“NO”等键设置 NSMutableDictionary

- (void) tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath];
NSMutableDictionary *dic = [gmailList objectAtIndex:indexPath.row];

if([[dic valueForKey:@"isChecked"]boolValue])
    
        cell.accessoryType = UITableViewCellAccessoryNone;
        [dic setObject:@"NO" forKey:@"isChecked"];
        cell.selected=FALSE;

    
    else
    
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
        [dic setObject:@"YES" forKey:@"isChecked"];
        cell.selected=TRUE;
    
   [self.tableView reloadData];

【讨论】:

以上是关于如何编码以选择带有复选标记的多行?的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式选择时,CheckedTextView 未绘制复选标记

UITableviewCell - 在编辑模式下单击空复选标记圆圈不会选择单元格

如何在管理面板中为多行添加带有批量操作(如 CRUD)的复选框 [重复]

如何在 UITableView 的编辑模式下只显示复选标记选择而不选择整个 UITableViewCell?

自定义 listView 行,带有复选框和旋转时的储蓄复选标记

如何在表格视图单元格上应用复选标记