如何禁用所有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;
答案 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}}也会被调用...