Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 在TableView中保存并加载UISwitch状态_Iphone_Objective C_Ios_Uitableview_Ios4 - Fatal编程技术网

Iphone 在TableView中保存并加载UISwitch状态

Iphone 在TableView中保存并加载UISwitch状态,iphone,objective-c,ios,uitableview,ios4,Iphone,Objective C,Ios,Uitableview,Ios4,我想保存开关状态。我创建了一个自定义单元格类,它在标签上打印一个开关,但存在一个问题,即如果我搜索一些文本,然后重新加载表视图,并且我选择的开关状态将发生更改,是否可以保持该状态 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ .... selectionStyle = UITableViewCellSelectionStyleNon

我想保存开关状态。我创建了一个自定义单元格类,它在标签上打印一个开关,但存在一个问题,即如果我搜索一些文本,然后重新加载表视图,并且我选择的开关状态将发生更改,是否可以保持该状态

- (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;
}
//选择切换状态更改时呼叫的用户

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

还有你。对不起,我的英语不好

ui开关更改时,您应该存储它的状态。这可能不是最好的方法,但您可以将状态存储在字典中,如下所示:

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;

请注意:没有理由设置两次
单元格的标记。switchOnOff
。此外,初始化单元格时可以设置
单元格.switchOnOff
的目标。没有理由每次重复使用单元时都这样做。此外,子类化您的
UITableViewCell
,然后在Interface Builder中设置单元格(例如,添加一个开关),将单元格的类设置为您的子类,这样您就不必纠结于标记和以编程方式设置
UISwitch
。从长远来看,我相信这会提供更好的性能。您将在界面中放置
状态。然后您将在使用它之前分配
状态
。这可能在您的
viewDidLoad:
中。然后,我回答的最后一部分,当您重用单元格时,您将把它放入
tableView:tableView cellforrow索引路径:
if ([states objectForKey:[NSNumber numberWithInt:indexPath.row]] != nil)
    cell.switchOnOff.on = [[states objectForKey:[NSNumber numberWithInt:indexPath.row]] boolValue]
else
    cell.switchOnOff.on = NO;