【发布时间】:2016-01-28 17:33:16
【问题描述】:
我有一个使用情节提要中的原型单元格创建的多选 UITableView。我可以进行多项选择,
我发现如果我选择第 0 行中的单元格,我将无法选择 9 行以外的任何单元格。即 9、18、27 等。
如果我取消选择 0,我就可以选择第 9 行。但是,这样做会使第 0、18、27 等行无法选择。
我已经实现了以下用于记录的委托方法,但是,当单击这些无响应的单元格时,不会调用此方法。
-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if([[tableView cellForRowAtIndexPath:indexPath] isSelected]) {
NSLog(@"Already Selected");
} else {
NSLog(@"New Select");
}
return indexPath;
}
我在 iOS8.3 iPhone 6 Plus、iOS9.2 iPhone 6S 和 iOS9.2 iPhone 5S 上进行了测试,结果相同,距离相同。
我不认为任何时候都有 9 个单元格可以显示在屏幕上是巧合。我认为它与单元格出列和重用有关,但我无法确认。
有没有人知道我错过了什么?
编辑:包括tableView:cellForRowAtIndexPath
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
DKIFriendTableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier forIndexPath:indexPath];
NSArray *array;
switch ([indexPath section]) {
case 0:
array = [recommendedFilteredList objectAtIndex:[indexPath row]];
break;
case 1:
array = [fullFilteredList objectAtIndex:[indexPath row]];
break;
default:
return nil;
break;
}
BOOL selected = [selectedUsers containsObject:[array objectAtIndex:0]];
// Due to conflicts with searching table, set whether cell is selected or not.
if(selected)
[tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
else
[tableView deselectRowAtIndexPath:indexPath animated:NO];
[cell setNameText:[array objectAtIndex:1]];
[cell setProfilePictureImage:[UIImage imageWithData:[[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:[array objectAtIndex:2]]options:NSDataReadingMappedIfSafe error:nil]]];
return cell;
}
可能值得一提的是,无论选择的布尔值是否被检查和实现,问题仍然存在。如果没有实现,搜索结果单元格不会以突出显示的方式返回。
编辑:包含numberOfSectionsInTableView: 委托方法,以获取与tableView:cellForRowAtIndexPath 方法相关的更多信息。
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 2;
}
编辑:添加示例项目 BitBucket 存储库链接
在处理掉我以前拥有的代码并尝试从头开始重新创建视图之后,我仍然遇到了同样的问题。然后,我在一个新的、单独的项目中再次只创建了项目的这一部分,但我仍然遇到了同样的问题(这次是通过不同的分隔 - n * 12 而不是 n * 9)。
【问题讨论】:
-
可能与滚动有关,并且在同一个地方有“阻止用户交互”吗?我的意思是,如果你再滚动一点,它仍然无法选择吗?
-
不,很遗憾没有。无论它在视图中的哪个位置,如果它与所选单元格之一相距 9(或多个),它仍然无法选择。一旦第一个选中的单元格被取消选中,第二个单元格现在就可以选择了。
-
可以分享
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath方法 -
当然,方法编辑成原始问题。
-
如果您有超过 2 个部分,单元格将
return nil。因此,您的willSelectRowAtIndexPath:方法将永远不会被调用。
标签: ios objective-c uitableview storyboard