如何禁用除UITableView的前3个单元格之外的所有单元格?
如果选择了其中一个禁用的单元格,则返回nil:
- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if ( indexPath.row >= 3 ) {
[[self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:2 inSection:0]] setAlpha:0.5];
return nil;
}
return indexPath; }
如何让禁用的单元格“可见”? 这是有效的,但我只是在启动时,因为滚动时每个单元格的indexPath都会发生变化(重复使用单元格):
for(int i = 3; i <= 100; i++) {
[[self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]] setAlpha:0.5];
}
答案 0 :(得分:3)
您可以通过设置selectionStyle属性来禁用单元格,请参阅以下代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = ...
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
禁用单元格选择的另一种方法是禁用单元格的用户交互。请参阅以下代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = ...
cell.userInteractionEnabled = NO;
}
享受。 :)
答案 1 :(得分:3)
最好在tableView:cellForRowAtIndexPath:
中设置已禁用单元格的不透明度。正如@Parcs在their answer中正确说明的那样,您也可以将已禁用的单元格的userInteractionEnabled
设置为NO。
您可以忽略tableView:didSelectRowAtIndexPath:
中的非活动单元格上的点按。