#iphone #objective-c
#iPhone #objective-c
Вопрос:
Я добавил пользовательский интерфейс в строку 3 моего TableViewController программно. Она отображается правильно, и я сохраняю состояние переключателя в NSUserDefaults. Я также сравниваю, в зависимости от значения NSUserDefaults и строкового значения, на которое я пытаюсь изменить состояние моего коммутатора (включено или ВЫКЛЮЧЕНО), но проблема в том, что состояние коммутатора не меняется.
Это мой код:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
switch (indexPath.row) {
case 2:
cell.textLabel.text = @"Weather";
switchControl = [[UISwitch alloc] initWithFrame:CGRectZero];
cell.accessoryView = switchControl;
[self.switchControl setOn:YES animated:NO];
[self.switchControl addTarget:self action:@selector(switchChanged:) forControlEvents:UIControlEventValueChanged];
[switchControl release];
break;
default:
break;
}
cell.textLabel.text = [settings objectAtIndex:indexPath.row];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
return cell;
}
-(void)switchChanged:(id)sender
{
app= (StopSnoozeAppDelegate*)[[UIApplication sharedApplication]delegate];
NSString *value;
userdefaults = [NSUserDefaults standardUserDefaults];
if(!switchControl.on){
value = @"OFF";
[userdefaults setObject:value forKey:@"stateOfSwitch"];
}
[userdefaults setObject:value forKey:@"stateOfSwitch"];
[userdefaults synchronize];
}
- (void)viewWillAppear:(BOOL)animated {
NSString *_value= [[NSUserDefaults standardUserDefaults] stringForKey:@"stateOfSwitch"];
if([_value compare:@"ON"] == NSOrderedSame){
[self.switchControl setEnabled:YES];
}
else {
[self.switchControl setEnabled:NO];
}
[super viewWillAppear:animated];
}
В появившемся представлении я сравниваю строку с моим значением NSUserDefaults и пытаюсь изменить состояние переключателя. Он правильно вводит точку останова, но не меняет состояние переключателя с ON на OFF.
Ответ №1:
Вы можете отключить настройку UISwitch
[yourSwitch setOn:NO animated:YES];
и включите настройку
[yourSwitch setOn:YES animated:YES];
Ответ №2:
Это не имеет никакого смысла:
switchControl = [[UISwitch alloc] initWithFrame:CGRectZero];
cell.accessoryView = switchControl;
[self.switchControl setOn:YES animated:NO];
[self.switchControl addTarget:self action:@selector(switchChanged:) forControlEvents:UIControlEventValueChanged];
[switchControl release];
Вы создаете переключатель, выполняете некоторые действия, предположительно, с другим переключателем, а затем отпускаете первый. Попробуйте это:
self.switchControl = [[UISwitch alloc] initWithFrame:CGRectZero];
cell.accessoryView = switchControl;
[self.switchControl setOn:YES animated:NO];
[self.switchControl addTarget:self action:@selector(switchChanged:) forControlEvents:UIControlEventValueChanged];
Ответ №3:
Попробуйте написать следующий код cellForRowAtIndexPath
вместо viewWillAppear
:
NSString *_value= [[NSUserDefaults standardUserDefaults] stringForKey:@"stateOfSwitch"];
if([_value compare:@"ON"] == NSOrderedSame) {
[self.switchControl setEnabled:YES];
} else {
[self.switchControl setEnabled:NO];
}
Ответ №4:
Вы можете просто переключиться ON
, установив:
switchOutlet.on = YES;
и сделайте это OFF
с помощью:
switchOutlet.on = NO;