2012-03-20 7 views
1

Я хочу сохранить состояние переключателя. Я создал собственный класс ячейки witch print one Включить ярлык, но есть проблема в том, что если я найду какой-нибудь текст, то Table View reload и мое выбранное состояние переключения изменится. Возможно ли поддерживать это состояние?Сохранение и загрузка состояния UISwitch в TableView

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

// и поиск в SearchBar это Methode это вызов при поиске какой-либо текст и данные изменения из базы данных проблемы здесь я выберите 0 и 1 индексный переключатель, а затем искать какой-нибудь текст, новые данные в виде таблицы приходят с 0 и 1 индекса ON, как сохранить его и как получить мое предыдущее состояние коммутатора

- (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

ответ

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

+0

Вы поместите 'государства' в свой интерфейс. Затем вы будете использовать 'states' перед его использованием. Это может быть в вашем 'viewDidLoad:'. Затем, в последней части моего ответа, вы поместите в свой стол tableView: tableView cellForRowAtIndexPath: 'при повторном использовании своих ячеек. – simonbs

+0

ОК, я попробую, спасибо @SimonBS – ravi

Смежные вопросы