2011-05-21 77 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

相關問題