IOS禁用所有单元格上的UItableview选择,但只有一个单元格

时间:2014-10-13 10:18:35

标签: ios objective-c uitableview didselectrowatindexpath

如何禁用所有UITableviewCell上的选择,但UITableview中的选项除外。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
    // Deselect row
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    // NSLog(@"Row Selected = %li",(long)indexPath.row);

    self.selectedInvitedUserId = [[self.viewOrderUserArray valueForKey:@"InvitedUserId"] objectAtIndex:[indexPath row]];
    NSLog(@"Row selectedInvitedUserId = %@",self.selectedInvitedUserId);

    if( self.selectedInvitedUserId && [indexPath row] != 0 )
        {
            if ([[self.viewSelectedItemsArray lastObject] count] == 0)
            {
                [self performSegueWithIdentifier:@"delimenuFromViewOrderList" sender:self];
            }
            else
            {
                [self performSegueWithIdentifier:@"viewOrderSummaryFromOrderDetails" sender:self];
            }
        } 
}

我知道这会禁用所有细胞。

cell.selectionStyle = UITableViewCellSelectionStyleNone;

2 个答案:

答案 0 :(得分:2)

您需要在

中执行此操作
(UITableViewCell *)tableView:cellForRowAtIndexPath:

回调。这是在单击时将执行的单元格上的设置。这不是你应该尝试手动管理的东西

像这样:

// Where indexPath != 0 points to the row you want to enable
if( self.selectedInvitedUserId && indexPath != 0 )
{
    [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
}
else
{
    [cell setSelectionStyle:UITableViewCellSelectionStyleBlue];
}

注意

这只会阻止它突出显示。如果它是正确的行,您需要在didSelectRowAtIndexPath:回调内部进行检查。

答案 1 :(得分:0)

以下是我的建议。

cellForRowAtIndexPath cell.selectionStyle = UITableViewCellSelectionStyleNone;为所有单元格保持didSelectRowAtIndexPath

现在你必须对if( userId == your_ignore_userid ) { // don't do anything } else { // do action - like go to another view controller } 采取行动。如下所示。

UITableViewCellSelectionStyleBlue

为什么不在cellForRowAtIndexPath中使用didSelectRowAtIndexPath的原因是因为如果用户点击该单元格(您不想要允许),该单元格的背景将变为蓝色反对你的应用程序设计,它看起来很难看。

因此我建议你处理cell.selectionStyle = UITableViewCellSelectionStyleNone;中的行动。

如果您还有其他问题,请与我们联系。

注意:

使用didSelectRowAtIndexPath只会禁用单元格选择..您可以点按单元格,{{1}}也会被调用...