2012-03-20 60 views
1

我想保存開關狀態。我創建了自定義單元類巫婆打印標籤上的一個開關,但有問題,如果我搜索一些文本,然後表視圖重新加載和我選定的開關狀態將改變,是否有可能保持該狀態?在TableView中保存並加載UISwitch狀態

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    .... 
selectionStyle = UITableViewCellSelectionStyleNone; 
CfResultFatch *temp = [result objectAtIndex:indexPath.row]; 
NSLog(@"%@",temp.complanName); 
//[cell.switchOnOff setOn:NO]; 
[cell.switchOnOff setTag:indexPath.row]; 
[cell.switchOnOff addTarget:self action:@selector(selectUser:)forControlEvents:UIControlEventValueChanged]; 
[cell.switchOnOff setTag:indexPath.row]; 
cell.lblUserName.text = temp.complanName; 
cell.textFld.text = temp.cipd; 
return cell; 
} 

// selectUser這是呼叫時開關狀態改變

-(IBAction)selectUser:(UISwitch*)sender{ 
if(sender.on) 
{ 
    [selectedpet addObject:[result objectAtIndex:sender.tag]]; 
}else{ 
    NSLog(@"%@",sender); 
    for(int j=0;j<[selectedpet count]; j++) 
        { 
         CfResultFatch *temp = [result objectAtIndex:sender.tag]; 
         CfResultFatch *temp1= [selectedpet objectAtIndex:j]; 
         if([(temp.complanName)isEqualToString:(temp1.complanName)]) { 
         [selectedpet removeObjectAtIndex:j]; 
      } 
    } 
    } 
} 

//並在搜索欄搜索這梅索德是調用搜索一些文本和數據從數據庫問題的變化時,這裏是我選擇在0和1的指數開關,然後搜索一些文本,在表視圖新的數據來與0和1的指數,如何保持它,以及如何獲得交換機我以前的狀態

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{ 
NSString *weburl = [NSString stringWithFormat:@"%@%@", @"http://192.168.1.196/ravi/searchUser.php?mname=",searchText]; 
NSURL *url = [NSURL URLWithString:weburl]; 
NSData *data =[NSData dataWithContentsOfURL:url]; 
[self getData:data]; 
[temptab reloadData]; 
} 

而且雅。對不起我的英文不好

+0

剛一說明:沒有理由設置'cell.switchOnOff'的標籤兩次。此外,初始化單元格時可以設置'cell.switchOnOff'的目標。每次單元被重用時,沒有理由這樣做。此外,您可能會從UITableViewCell的子類中受益,然後在Interface Builder中設置單元格(例如,添加一個開關),將單元格的類設置爲您的子類,然後您不必與標籤糾纏並設置你的'UISwitch'編程。從長遠來看,我相信這會帶來更好的表現。 – simonbs 2012-03-20 08:52:05

回答

3

你應該在改變時存儲UISwitch的狀態。它可能不是這樣做的最佳方式,但你可以在狀態存儲在這樣的詞典:

NSMutableDictionary *states = [NSMutableDictionary alloc] init]; 
[states setObject:[NSNumber numberWithBool:sender.on] forKey:[NSNumber numberWithInt:sender.tag]] 

然後,顯示UITableViewCell時:

if ([states objectForKey:[NSNumber numberWithInt:indexPath.row]] != nil) 
    cell.switchOnOff.on = [[states objectForKey:[NSNumber numberWithInt:indexPath.row]] boolValue] 
else 
    cell.switchOnOff.on = NO; 
+0

但是我放這個代碼的地方?你能告訴我嗎? – ravi 2012-03-20 09:00:22

+0

你會在你的界面中放入'states'。然後在使用它之前你會分配'states'。這可能在你的'viewDidLoad:'中。然後,當你重用你的單元格時,我的答案的最後一部分將放入你的'tableView:tableView cellForRowAtIndexPath:'中。 – simonbs 2012-03-20 09:16:07

+0

好吧,我會嘗試一下,謝謝@SimonBS – ravi 2012-03-20 09:19:25