我有一个UITableView,当isEditing=YES
显示带有标准iOS选择圆形'复选框'的单元格时(见下图)。其中一些是通过CoreData“加入书签”。
tableView:willDisplayCell
从CoreData读取并设置
标记的单元格cell.selected = YES;
。
麻烦的是这些'加书签的'单元格不响应
tableView:didDeselectRowAtIndexPath
或
tableView:didSelectRowAtIndexPath
尽管相同的回调在cell.selected=NO;
这是在
中执行的- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
if (tableView.isEditing)
{ [cell setSelected:[self isCellFave:indexPath]]; }
isCellFave
在哪里
- (BOOL) isCellFave:(NSIndexPath *) indexPathIn
{
BOOL isSelected = NO;
// Check if this cell is a favourite
NSError *error;
NSString * id = [self getIDFromIndexPath:IndexPathIn];
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Event"];
request.predicate = [NSPredicate predicateWithFormat:@"( id = %@ )", id];
request.sortDescriptors = @[[[NSSortDescriptor alloc] initWithKey:@"sort1" ascending:YES selector:@selector(caseInsensitiveCompare:)]];
NSArray *fetchedObjects = [ManagedContext executeFetchRequest:request error:&error];
if ([fetchedObjects count] !=0) //if a result then it is a fave
{
// When we set a cell as selected, all gestures stop working - so we can't deselect it.
isSelected=YES;
}
return isSelected;
}
答案 0 :(得分:1)
尝试使用这些代码。
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
if (tableView.isEditing) {
[cell setSelected:[self isCellFave:indexPath]];
[cell addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(unselectRow:)]];
}
}
}
然后添加一个点击手势处理程序
- (void)unselectRow:(UITapGestureRecognizer *)sender {
UITableViewCell *cell = (UITableViewCell *) sender.view;
cell.selected = NO;
}
答案 1 :(得分:0)
点击选定的单元格不会调用
tableView:didSelectRowAtIndexPath
tableView委托方法因为那个 单元格已被选中。如果点击未选中的单元格,它将工作/或被调用。