2011-05-21 74 views
1

我正在使用开关控件,无论何时从页面导航或重新启动应用程序,其值都设置为默认“关闭”。如何克服这个问题,如果按下它应该保持开启状态,或者如果按下它应该保持关闭状态,直到我们手动更改为止。如何在应用程序中保存开关的状态

这里是我的代码,在那里我分配和了滚动

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell new"; 
    listData =[self.tableContents objectForKey:[self.sortedgroups objectAtIndex:[indexPath section]]]; 


    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]autorelease]; 

    } 
    NSUInteger row = [indexPath row]; 
    cell.textLabel.text = [listData objectAtIndex:row]; 


    if(indexPath.section==0) 
    { 
     switch (indexPath.row) 
     { 
      case 0: 
      { 
       switcher = [[[UISwitch alloc] initWithFrame:CGRectZero] autorelease]; 
       [switcher addTarget:self action:@selector(switchAction:) 
        forControlEvents:UIControlEventValueChanged]; 
       cell.accessoryView = switcher; 
       switcher.tag = indexPath.row; 


       //[email protected]"switcher"; 

      } 
       break; 
      case 1: 
      { 


       slide = [[[UISlider alloc] initWithFrame:CGRectMake(0,0, 150, 15)] autorelease]; 
       [slide addTarget:self action:@selector(slideact:) 
       forControlEvents:UIControlEventValueChanged]; 
       cell.accessoryView = slide; 
       // slide.tag = indexPath.row;     
      } 
       break; 

} 
} 
} 

设置ffram这是我对开关的操作方法:

- (void)switchAction:(UISwitch*)sender 
{ 
    NSLog(@"switchAction: sender = %d, isOn %d", [sender tag], [sender isOn]); 

    if(sender.on) 
    { 

[[NSUserDefaults standardUserDefaults]setObject:@"on" forKey:@"switcher"]; 
     [[NSUserDefaults standardUserDefaults]synchronize]; 

    } 
    else 
    { 
[[NSUserDefaults standardUserDefaults]setObject:@"off" forKey:@"switcher"]; 
     [[NSUserDefaults standardUserDefaults]synchronize]; 

    } 
} 

-(void)viewWillAppear:(BOOL)animated 
{ 
if ([[[NSUserDefaults standardUserDefaults]valueForKey:@"switcher"]isEqualToString:@"on"]) 
{ 

switcher.on=YES; 

    } 
else 
{ 
switcher.on=NO; 
} 

} 

回答

2

好吧,你需要保存开关的状态。 为此,您甚至可以使用数据库或NSUserDefaults。 使用NSUserDefaults会好得多。

- (void)switchAction:(UISwitch*)sender 
{ 
    DEBUGLOG(NSLog(@"switchAction: sender = %d, isOn %d", [sender tag], [sender isOn])); 

    if(sender.on) 
    { 

[[NSUserDefaults standardUserDefaults]setObject:@"on" forKey:@"switch"]; 
     [[NSUserDefaults standardUserDefaults]synchronize]; 

    } 
    else 
    { 
[[NSUserDefaults standardUserDefaults]setObject:@"off" forKey:@"switch"]; 
     [[NSUserDefaults standardUserDefaults]synchronize]; 

    } 
} 

然后在你的viewWillAppear中的方法做以下

-(void)viewWillAppear:(BOOL)animated 
{ 
if ([[[NSUserDefaults standardUserDefaults]valueForKey:@"switch"]isEqualToString:@"on"]) { 

switch.Ison=YES; 

    } 
else 
{ 
switch.Ison=NO; 
} 
} 
+0

我试过你的代码,谢谢你的时间,但是当我使用表格视图时,当我打开开关如果我滚动表格,开关按钮会自动设置为关闭。你能帮我吗 – sujay 2011-05-21 09:47:54

+0

看到我已经投票了你,我已经用代码编辑了我的问题,请检查.. – sujay 2011-05-21 09:59:02

0

你应该有一个值,以节省开关控制状态可能在用户偏好上。当你导航到这个视图时,你应该检查这个值。

Boolean status=YES; // You should read this value from User Preference for example it represent the last status set to the switch control. 
[switchView setOn:status animated:NO]; 

请参考以下问题进行读取和写入用户首选项: iphone-reading-and-saving-preferences

+0

我收到状态未申报error.what应的状态设置为 – sujay 2011-05-21 06:17:11

+0

以及如何从用户的喜好 – sujay 2011-05-21 06:26:20

0

您只需使用方法设置开关开启和关闭这样

- (void)switchAction:(UISwitch*)sender 
{ 
    DEBUGLOG(NSLog(@"switchAction: sender = %d, isOn %d", [sender tag], [sender isOn])); 

    if(sender.on) 
    { 

    } 
    else 
    { 

    } 
} 

如果你想要将其设置为默认值,那么您只需在应用程序中将其设置为on,即在实现文件中的viewwillapar或实现后的文件顶部,如

switch.on=YES; 
+0

读它,如果我设置switch.on =是的,它会一直显示。当我关闭并重新启动应用程序时,我希望显示选定的一个。 – sujay 2011-05-21 08:55:07

+1

哦,你是什么意思,你希望你的交换机的最后一个状态显示,意思是如果你选择了它,你退出应用程序,然后再次重启,那么状态应该是关闭....好吧Sameer然后你应该以适当的方式提问这个问题是不恰当的。或者你应该问第二个问题。参见下面的答案。如果他们帮助你,你应该接受并且投票答案,这样你会得到答案,否则没有人会给你答案。 – Sabby 2011-05-21 09:00:14

+0

是的,你有我的问题对,你没有投票给你。 – sujay 2011-05-21 09:07:39

相关问题