【问题标题】:IOS Disable UItableview Selection on All Cells but one CellIOS禁用所有单元格上的UItableview选择,但一个单元格
【发布时间】:2014-12-07 21:07:44
【问题描述】:

如何禁用对所有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;

【问题讨论】:

  • 您使用的是自定义单元格吗? @CapeFurSeal
  • 您要禁用除一个以外的所有单元格吗?
  • 不只是一个普通的tableview...
  • @Haroon > 是的,你 100% 正确
  • 嘿@CapeFurSeal 检查我的答案。,,,

标签: ios objective-c uitableview didselectrowatindexpath


【解决方案1】:

以下是我的建议。

cellForRowAtIndexPath 中保持cell.selectionStyle = UITableViewCellSelectionStyleNone; 为所有单元格存活。

现在您必须对didSelectRowAtIndexPath 采取行动。如下所示。

if( userId == your_ignore_userid )
{
    // don't do anything
}
else
{
    // do action - like go to another view controller
}

为什么不在cellForRowAtIndexPath 中使用UITableViewCellSelectionStyleBlue 的原因是,如果用户单击该单元格(您不想允许这样做),该单元格的背景将变为蓝色,这将不利于您的应用设计会很难看。

因此我建议您在didSelectRowAtIndexPath 中处理操作。

如果您还有其他问题,请告诉我。

注意:

cell.selectionStyle = UITableViewCellSelectionStyleNone; 只是禁用了单元格选择。您可以点击单元格,didSelectRowAtIndexPath 也会被调用...

【讨论】:

    【解决方案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: 回调中的行是否正确。

    【讨论】:

    • @FahimParkar 我认为你误解了我的代码。我并不是说它是针对一个用户的。 OP 提出了一个问题,并在 if 语句中使用 selectedInvitedUserId 给出了示例代码以做出决定。我只是在给他的回答中复制了类似的内容。但是,我会将其更改为 OP 所具有的内容,并对我的代码进行调整
    • 是的,我的错误......我得到......这就是为什么删除了downvote和upvoted......但我会说不要使用UITableViewCellSelectionStyleBlue并在didSelectRowAtIndexPath中处理点击操作。有关详细信息,请参阅我的答案。
    • @FahimParkar 啊好的,没问题,感谢您删除它。如果您将所有单元格设置为UITableViewCellSelectionStyleNone,用户将不会收到任何单元格被点击的指示。 OP 可能不想要蓝色,但这取决于他自己决定或者问自己。我的代码所做的是,它只会以蓝色突出显示 OP 希望可点击的行,而不是其余行。 OP 基本上已经弄清楚了您发布的内容,但询问了如何只显示一个,暗示他对它的运行方式很好(默认为蓝色),但只是想防止它在所有单元格上发生
    • cell.selectionStyle = UITableViewCellSelectionStyleNone; 只是禁用了选择。您可以点击单元格并调用 didSelectRowAtIndexPath...
    • @FahimParkar 是的,我在回答这个事实时也有注释
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2013-03-10
    • 1970-01-01
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多