在表格视图中保存复选标记

时间:2013-03-12 19:43:32

标签: ios objective-c cocoa-touch uitableview

您好我是xcode的新手,我一直在寻找问题的答案。我有一个表视图,我有一个像任务列表设置的复选标记。我想知道当我从视图移动到视图时如何在我的任务列表中保存复选标记。现在,当我回到我的应用程序中的另一个视图时,当我回到表视图控制器时,它们就消失了。我没有设置核心数据,而且我没有使用播放列表。这里的代码很简单:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{  
    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
    [tableView deselectRowAtIndexPath:indexPath animated:YES];

    if (cell.accessoryType == UITableViewCellAccessoryNone) {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    } else {
        cell.accessoryType = UITableViewCellAccessoryNone;
    }
} 

检查是否有一些简单的代码可以在我回到表视图时进行此保存。

2 个答案:

答案 0 :(得分:0)

如果你想保留应用程序重新启动之间的复选标记状态,最好的解决方案似乎是使用Core Data ..虽然它可能起初看起来有点矫枉过正,但是当你尝试时它肯定会有所回报应用程序变得更先进。您已经拥有了一个可以进一步构建的可靠数据管理系统 在这种情况下,您可能希望创建一个表示任务的实体,在最简单的情况下,您只需要两个属性:NSString名称和BOOL isCompleted。 当然,所有这些都可以使用简单的XML,但从一开始就使用Core Data将是更具前瞻性的证据。

您可以在此处找到有关Core Data的更多信息。 http://developer.apple.com/library/mac/#documentation/cocoa/Conceptual/CoreData/cdProgrammingGuide.html

答案 1 :(得分:0)

我已经使用自定义复选框并在cellForRowAtIndexPath中写了:

       static NSString *CustomCellIdentifier = @"CustomCell";

       ReportAttendedBy *cell = (ReportAttendedBy *)[tableView dequeueReusableCellWithIdentifier:CustomCellIdentifier];

        if (cell == nil)
        {
            NSArray *nib;
            nib = [[NSBundle mainBundle] loadNibNamed:@"ReportAttendedBy" owner:self options:nil];
            for(id oneObject in nib)
                if([oneObject isKindOfClass:[ReportAttendedBy class]])
                    cell = (ReportAttendedBy *)oneObject;
        }

        [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
        cell.textLabel.font= [UIFont fontWithName:@"Arial Rounded MT Bold" size:15.0];
        cell.textLabel.textColor=[UIColor whiteColor];

        ReportCreateOrView *repVw= [arrAttendedBy objectAtIndex:indexPath.row];
        cell.txtCustName.text = repVw.strCustomer;
        cell.txtCustName.tag = indexPath.row + 100;
        cell.txtCustName.delegate = self;
        [cell.txtCustName addTarget:self action:@selector(goAway:) forControlEvents:UIControlEventEditingDidEndOnExit];

        [cell.btnCheckBox addTarget:self action:@selector(checkboxClicked:) forControlEvents:UIControlEventTouchUpInside];
        cell.btnCheckBox.tag = indexPath.row + 5000;

        NSLog(@"repVw.strSelected=== %@",repVw.strSelected);

        if([repVw.strSelected isEqualToString:@"1"])
        {
            [cell.btnCheckBox.currentBackgroundImage isEqual:[UIImage imageNamed:@"ckeckbox_checked.png"]];

          //  cell.txtCustName.userInteractionEnabled = true;
        }
        else
        {
            [cell.btnCheckBox.currentBackgroundImage isEqual:[UIImage imageNamed:@"ckeckbox_unchecked.png"]];
            //cell.txtCustName.userInteractionEnabled = false;
        }

        return cell;

我在checkboxClicked方法中保持复选框值1和0以及更改按钮图像

    -(IBAction)checkboxClicked:(id)sender
    {
        NSLog(@"tag=== %d",[sender tag] - 5000);

        int index= [sender tag] - 5000;
        UIButton *btn= (UIButton *)sender;

        ReportCreateOrView *repObj= [arrAttendedBy objectAtIndex:index];

        if([btn.currentBackgroundImage isEqual:[UIImage imageNamed:@"checkbox_unchecked.png"]])
        {
            [btn setBackgroundImage:[UIImage imageNamed: @"checkbox_checked.png"] forState:UIControlStateNormal];
            selCustId = [repObj.strCustId intValue];
            val = 1;
            [self updateAttendedBy]; //in this method i've written query to update value in table

        }
        else if([btn.currentBackgroundImage isEqual:[UIImage imageNamed:@"checkbox_checked.png"]])
        {
            [btn setBackgroundImage:[UIImage imageNamed: @"checkbox_unchecked.png"] forState:UIControlStateNormal];
            selCustId = [repObj.strCustId intValue];
            val= 0;
            [self updateAttendedBy];
        }
   }

不要忘记在viewWillAppear中为getvalues编写方法。 :)