仅在选择特定段时启用滑动以删除

Enable Swipe to Delete Only when certain segment is selected

我只想在 segmentedcontrol.segmentindex == 7 时显示单元格。

使用下面的代码,无论选择的段如何,默认情况下每个单元格都是 "swipe deletable"。

我有一个 if 语句来检查所选的段,但它似乎没有改变结果。

我还尝试了其他解决方案,在启用编辑之前检查索引路径,但没有成功。

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    editingStyle = UITableViewCellEditingStyleNone;

    if(!_segmentedControl.selectedSegmentIndex == 7){
        NSLog(@"%ld",(long)_segmentedControl.selectedSegmentIndex);
        editingStyle = UITableViewCellEditingStyleNone;
    }

    if (editingStyle == UITableViewCellEditingStyleDelete) {
        _MyTeamArray = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"myTeam"]];

        [_MyTeamArray removeObjectAtIndex:indexPath.row];
        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];

        NSLog(@" Pre-remove %@",_MyTeamArray);

        [[NSUserDefaults standardUserDefaults] setObject:_MyTeamArray forKey:@"myTeam"];
    } else {
        NSLog(@"Unhandled editing style! %ld", editingStyle);
    }
}

这个怎么样?

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    if(segmentedControl.selectedSegmentIndex == 7)
        return YES;
    else
        return NO;
}

将我的评论更改为答案:

您可能想改用 UITableViewDataSource- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath 函数。以下实现可能是您所需要的(前提是没有比您提供的更复杂的逻辑。

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPat {
    return _segmentedControl.selectedSegmentIndex == 7;
}