我使用带有复选框的UITableView。在我的cellForRowAtIndexPath
方法中,我按如下方式设置了一些选定的单元格,
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if(tableView == self.sideBarTbl){
cell.textLabel.text = [titleArray objectAtIndex:indexPath.row];
cell.tag = indexPath.row;
if(indexPath.row == 0){
[cell setSelected:true];
}else if(indexPath.row == 1){
[cell setSelected:true];
}else {
[cell setSelected:false];
}
}
简而言之,如果行是0,1那么我会检查UITableView的复选框。
当用户单击第0行或第1行时,它应该调用didDeselectRowAtIndexPath
,因为已经检查了第0行和第1行复选标记。但是,它总是调用didSelectRowAtIndexPath
。无论是否选中该复选框,它始终会调用didSelectRowAtIndexPath
。选中此复选框后,如何让其致电didDeselectRowAtIndexPath
,如果未选中该复选框,请致电didSelectRowAtIndexPath
?
答案 0 :(得分:2)
didDeselectRowAtIndexPath
方法仅针对之前已被触摸的单元格调用。它与单元格的selected
属性无关。如果要为取消选择的单元格执行某些操作,只需使用didSelectRowAtIndexPath
方法在NSMutableArray中手动记录选择。忘记didDeselectRowAtIndexPath
。供参考:UITableView cell on double click should go to previous state
以及Objective-C示例:
@interface SomeViewController : UIViewController<UITableViewDelegate> {
NSMutableArray *selectedIndexPaths;
}
@implementation SomeViewController
//......
- (void)viewDidLoad {
[super viewDidLoad];
selectedIndexPaths = [NSMutableArray array];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if ([selectedIndexPaths containsObject:indexPath]) {
[selectedIndexPaths removeObject:indexPath];
//Do something when deselecting.
}
else{
[selectedIndexPaths addObject:indexPath];
//Do something when selecting.
}
}
//......
@end
如果选择是单一且独占的,就像放射线框一样,在处理前一个选定单元格的取消选择过程之后,只需使用单个变量NSIndexPath *selectedIndexPath;
来记录didSelectRowAtIndexPath
中的选择。
答案 1 :(得分:1)
在cellForRowAtIndexPath
而不是[cell setSelected:true];
[tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionBottom];`
当用户想要取消选择时,请使用以下代码。在didDeselectRowAtIndexPath
[tableView deselectRowAtIndexPath:indexPath animated:YES];
最后,您可以按如下方式获取所选索引,
-(void) getSelectedIndices
{
NSArray *indexPathArray = [tableView indexPathsForSelectedRows];
for(NSIndexPath *index in indexPathArray)
{
NSLog(@"Index: %ld",(long)index.row);
}
}
如果您有任何疑问,请退回