2011-10-14 4 views
0

Я добавил программу uiswitch в таблицу TableViewController 3 программно. Он отображается правильно, и я сохраняю состояние переключателя в NSUserDefaults. Я также сравниваю, в зависимости от значения NSUserDefaults и строкового значения. Я пытаюсь изменить состояние моего переключателя на (ON или OFF). Но проблема в том, что состояние переключателя не изменяется.Как переключить кнопку uiswitch программно

Это мой код:

- (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]; 
} 

По мнению WillAppear я сравниваю строку с моим значением NSUserDefaults и пытаюсь изменить положение переключателя. Он правильно входит в точку останова, но не меняет состояние переключения с ON на OFF.

ответ

0

Вы можете просто включить переключатель, установив переключательOutlet.on = YES; и выключите его с помощью switchOutlet.on = NO;

+0

ya Я пробовал, но не работает – Rani

6

Вы можете отключить UISwitch установки

[yourSwitch setOn:NO animated:YES]; 

и включите настройки

[yourSwitch setOn:YES animated:YES]; 
0

Это не имеет никакого смысла:

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]; 
0

попробуйте написать следующий код в cellForRowAtIndexPath вместо viewWillAppear:

NSString * _value = [[NSUserDefaults standardUserDefaults] stringForKey: @ "stateOfSwitch"];

if([_value compare:@"ON"] == NSOrderedSame) 
{ 
    [self.switchControl setEnabled:YES]; 
} 
else 
{ 
    [self.switchControl setEnabled:NO]; 
} 
Смежные вопросы