2011-10-14 15 views
0

私はtableViewController行3にプログラムでuiswitchを追加しました。正しく表示されていて、NSUserDefaultsにスイッチの状態を保存しています。私はまた、NSUserDefaultsの値と文字列の値に応じて私のスイッチの状態を(ONまたはOFF)に変更しようとしているかどうかによって比較しています。しかし、問題はスイッチの状態が変更されていないことです。uiswitchボタンをプログラムで切り替える方法

これは私のコードです:私は私のNSUserDefaults値と文​​字列を比較すると、スイッチの状態を変更しようとしていますWillAppearビューで

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

。ブレークポイントに正しく入りますが、スイッチの状態はONからOFFに変わりません。

答えて

0

switchOutlet.on = YESを設定するだけで、スイッチをオンにすることができます。 switchOutlet.on = NO;でオフにします。

+0

ya私は試したが動作していない – Rani

6

あなたは

[yourSwitch setOn:NO animated:YES]; 

を設定UISwitchのスイッチをオフにし、これはどんな意味がありません

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

あなたはスイッチを作成し、いくつかの操作を行い他のスイッチに接続して、最初のスイッチを解放してください。これを試してみてください:

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

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

ではなく、viewWillAppearのcellForRowAtIndexPathに次のコードを書いてみてください。

if([_value compare:@"ON"] == NSOrderedSame) 
{ 
    [self.switchControl setEnabled:YES]; 
} 
else 
{ 
    [self.switchControl setEnabled:NO]; 
} 
関連する問題