如果所有行都有Checkmark,则启用按钮

时间:2015-01-17 17:54:56

标签: ios objective-c uitableview

我有UITableView,当所有行都有Checkmark 时,我需要启用导航栏按钮。

有办法做到这一点吗?

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    tableData = [NSArray arrayWithObjects:@"1", @"2", @"3", nil];

    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(print_Message)];
    self.navigationItem.rightBarButtonItem.enabled = NO;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"SimpleTableCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    cell.textLabel.text = [tableData objectAtIndex:indexPath.row];

    return cell;
}

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

    NSLog(@"didSelectRow");

    UIAlertView *messageAlert = [[UIAlertView alloc] initWithTitle:@"Row Selected" message:[tableData objectAtIndex:indexPath.row] delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];

    [messageAlert show];

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

    if (cell.accessoryType == UITableViewCellAccessoryNone) {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;

    } else {
        cell.accessoryType = UITableViewCellAccessoryNone;
    }

    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

1 个答案:

答案 0 :(得分:1)

只要在索引路径上不会多次调用cellForRowAtIndexPath:(例如在滚动,强制重新加载,视图重新出现等情况下),您就可以使用{{1 } UITableView帮助确定是否选择了所有单元格。

为了让indexPathsForSelectedRows起作用,您需要对代码进行一些更改。

(1)在indexPathsForSelectedRows中添加self.tableView.allowsMultipleSelection = YES;

(2)在初始代码中,您在方法结尾处使用viewDidLoaddidSelectRowAtIndexPath:。相反,请使用deselectRowAtIndexPath:didSelectRowAtIndexPath:,以便选中带有复选标记的行,并且不会选中无复选标记的行。

didDeselectRowAtIndexPath: