-1

嗨,我是 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;
    }
} 

当我回到表格视图时,检查是否有一些简单的代码可以保存它。

4

2 回答 2

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 中编写获取值的方法。:)

于 2013-03-13T05:48:24.040 回答
0

如果您想在应用程序重新启动之间保留复选标记的状态,最好的解决方案似乎是使用核心数据。虽然乍一看对于您尝试做的事情来说似乎有点矫枉过正,但当您的应用程序变得更多时,它肯定会得到回报先进的。您已经拥有一个可靠的数据管理系统,您可以在此基础上进一步构建。
在这种情况下,您可能想要创建一个表示任务的实体,在最简单的情况下,您只需要两个属性:NSString名称和BOOLisCompleted。当然,所有这些都可以使用简单的 XML 实现,但从一开始就使用 Core Data 会更有利于未来。

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

于 2013-03-12T20:01:34.903 回答