Я хочу, чтобы UIS-переключатель внутри TableViewCell изменял текст с «Активный» на «Отключен» и наоборот при переключении, но при изменении переключателя все данные в моем табличном представлении исчезают.Я использую «перезагрузить данные», так как я не знаю, как изменить текст конкретной ячейки.
К вашему сведению, 'текущий элемент' является основным объектом данных со свойством BOOL 'itemEnabled'.
Переключатель виден только в «режиме редактирования».
У меня есть переключатель UIS в ячейке табличного представления в моем «контроллере подробного представления»:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = nil;
NSString *cellDetail = nil;
static NSString *EnabledCellIdentifier = @"Enabled";
cell = [tableView dequeueReusableCellWithIdentifier:EnabledCellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:EnabledCellIdentifier] autorelease];
UISwitch* actSwitch = [[UISwitch alloc] initWithFrame:CGRectZero];
[cell setEditingAccessoryView:actSwitch];
[actSwitch addTarget:self action:@selector(actSwitchChanged:) forControlEvents:UIControlEventValueChanged];
if ([[currentItem valueForKey:@"itemEnabled"] boolValue]) {
cellDetail = @"Active";
actSwitch.on = YES;
} else {
cellDetail = @"Disabled";
actSwitch.on = NO;
}
[actSwitch release];
cell.textLabel.text = cellDetail;
return cell;
}
У меня есть метод для получения действия:
- (void)actSwitchChanged:(id)sender {
UISwitch* swEnabled = (UISwitch*)sender;
NSManagedObjectContext* itemContext = [currentItem managedObjectContext];
currentItem.itemEnabled = [NSNumber numberWithBool:swEnabled.on];
NSError *error = nil;
if (![itemContext save:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
}