Я делал это раньше, но у меня проблемы с тем, чтобы заставить его работать снова. В любом случае, в моем модельном классе у меня есть словарь, в котором есть два элемента для сортировки, и я хочу, чтобы только одно значение было ДА, а остальные - НЕТ. Я хочу, чтобы выбор элемента в UITableViewCell отражал это и оживлял выбор и отмену выбора. Таким образом, в классе модели у меня есть этот метод, который просто меняет другое значение, которое было выбрано на false:
- (void)setSingleSort:(NSString *)key {
for (NSString *str in [_sortOrderDictionary allKeys]) {
if (str != key) {
[_sortOrderDictionary setObject:[NSNumber numberWithBool:NO] forKey:str];
}
}
}
Тогда у меня есть этот фрагмент в моем методе didSelectRowForIndexPath:
NSUInteger row = [indexPath row];
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.accessoryType = UITableViewCellAccessoryCheckmark;
[cell setSelected:YES animated:YES];
NSString *key;
BOOL valueAtKey;
key = [_sortCategoryList objectAtIndex:row];
valueAtKey = [[dmgr.SortOrderDictionary valueForKey:key] boolValue];
if (valueAtKey != YES) {
[dmgr.SortOrderDictionary setObject:[NSNumber numberWithBool:!valueAtKey] forKey:key];
[dmgr setSingleSort:key];
UITableViewCell *oldCell = [tableView cellForRowAtIndexPath:_lastIndexPath];
oldCell.accessoryType = UITableViewCellAccessoryNone;
[tableView deselectRowAtIndexPath:_lastIndexPath animated:YES];
}
_lastIndexPath = indexPath;
[tableView reloadData]; //Edited, added this to the end and it seems to work. Don't know why it's needed though since the deslectRowAtIndexPath should animated, along with the setSelected:Animated: right?