【问题标题】:how to maintain the checkbox state after navigating from one ViewController to another ios从一个 ViewController 导航到另一个 ios 后如何保持复选框状态
【发布时间】:2014-02-10 08:17:37
【问题描述】:

我有一个表格视图,我将按钮放在表格视图上作为复选框,现在我想保持复选框的状态。我的问题是当我从一个视图控制器导航到另一个或终止我的应用程序时,所有复选框都未选中之前检查过。任何有意义的建议。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *str=[NSString stringWithFormat:@"identfier%d",indexPath.row];
    UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:str];

    UILabel *lblValue;
    if (cell==nil) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:str];

        lblValue=[[UILabel alloc]init ];

        lblValue.tag=indexPath.row+20000;
        btnValue=[UIButton buttonWithType:UIButtonTypeRoundedRect];

        btnValue.tag=indexPath.row+100;
    }else{
       lblValue=(UILabel*)[cell.contentView viewWithTag:indexPath.row+20000];
       btnValue=(UIButton*)[cell.contentView viewWithTag:indexPath.row+100];

    }

    lblValue.backgroundColor=[UIColor clearColor];
    lblValue.text=[[sortedArray objectAtIndex:indexPath.row]valueForKey:@"CategoryName"];
    //lblValue.text=@"some value";

    UIImage *buttonImage = [UIImage imageNamed:@"radiou.png"];
    UIImage *buttonImage1=[UIImage imageNamed:@"radioc.png"];
    [btnValue setBackgroundImage:buttonImage forState:UIControlStateNormal];
    [btnValue setBackgroundImage:buttonImage1 forState:UIControlStateSelected];


    [btnValue addTarget:self action:@selector(checkedButton:) forControlEvents:UIControlEventTouchUpInside];
    btnValue.frame=CGRectMake(10, 15, 25, 25);

    if([self.navigationItem.rightBarButtonItem.title isEqual:@"Done"]){
        [UITableView animateWithDuration:0.3f delay:0.1f options:UIViewAnimationOptionCurveEaseInOut animations:^{
            lblValue.frame=CGRectMake(35+25, 17, 200, 20);
           btnValue.hidden=NO;

        } completion:nil];  
    }
    else
    {
        [UITableView animateWithDuration:0.3f delay:0.1f options:UIViewAnimationOptionCurveEaseInOut animations:^{
             lblValue.frame=CGRectMake(35, 17, 200, 20);

            btnValue.hidden=YES;
        } completion:nil];

    }
    [cell.contentView addSubview:btnValue];
    [cell.contentView addSubview:lblValue];

    return  cell;
}

【问题讨论】:

  • 您应该在 cellForRowAtIndexPath 中恢复按钮选中状态,因为在重新加载表格按钮后,默认情况下会取消选中。因此,您需要一个数据结构来存储按钮状态。
  • @vokilam 抱歉,但我想在我的应用程序终止后主要状态

标签: ios iphone xcode cocoa-touch


【解决方案1】:

为此,您可以创建一个包含复选框值的 NSArray。现在,当调用 viewWillDissappear 时,您可以将此数组保存在 NSUserDefaults 中,在 viewWillAppear 中,您可以从 NSUserDefaults 中检索数组并相应地在复选框中设置值。

假设您的表中有 10 行,那么您可以创建一个计数为 10 的数组。现在如果选中第 4 行和第 5 行的复选框,那么您可以将 1 放在索引 3 和 4 上,其余索引应该是0.

int arrayCount = 10;//enter number of rows you have

NSMutableArray *checkStatusArray = [[NSMutableArray alloc]init];
for (int i=0; i<arrayCount; i++)
{
 if([[checkBoxStatusArray objectAtIndex: i]integerValue] == 1)
 // Above mentioned array should be made prior to this method from which checkbox will be loaded or you can make 0 entries here for every indexInitially
 {
  [checkStatusArray addObject:[NSString stringWithFormat:@"1"]];
 }
 else
 {
  [checkStatusArray addObject:[NSString stringWithFormat:@"0"]];
 }
}
// To put value
[[NSUserDefaults standardUserDefaults]setObject:checkStatusArray forKey:@"statusArray"];

// Now to fetch value
NSArray *valuesArray = [[NSUserDefaults standardUserDefaults]objectForKey: @"statusArray"];

【讨论】:

  • 注意:viewDidUnload 在 iOS 6.0 中已弃用。在内存不足的情况下不再清除视图,因此永远不会调用此方法。
  • 你的意思是通过标记我必须存储复选框的值
  • @Ashutosh-Systematix 如果你有时间可以写一些逻辑吗。
  • 检查编辑,我只是​​在这里自己输入代码,如果出现格式错误请解决。
  • 这个数组将在 viewdidload 中创建,每个索引处都为 0,并且应该在复选框的每个操作之后更新,即。如果选中索引 2 处的复选框,则数组的第二个索引应变为 1
【解决方案2】:

如果您想在 viewControllers 中保持状态而不将状态保存和加载到持久存储,您应该将 viewControllers 属性设置为它们的 parentViewControllers。

这样,当您离开它们时,它们就不会被释放。

您还必须记住只分配和初始化它们一次。

【讨论】:

  • 我想设置一个时间选择并且一直保持..?
  • 你的意思是,即使应用程序被终止?
  • 在这种情况下你必须使用 NSUserDefaults 或者实现 NSCoding 协议
猜你喜欢
  • 1970-01-01
  • 2020-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多