如何在iPhone的表格视图中保留索引路径值?

时间:2011-01-27 11:33:09

标签: iphone uitableview checkmark

我创建了一个表视图并显示了数据。当我点击表格视图中的数据时,我把附件标记(使用UITableViewCellAccessoryCheckmark,Like,Check Mark)。现在我想保留索引位置的状态。因为当我去另一个班级然后回到表格视图时,将显示先前的状态(附件标记)。那我怎么能保持状态,这意味着存储或保存索引路径值。(不使用AppDelegate方法)所以我怎样才能实现这一目标?

我的示例代码是

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

 if (newRow != oldRow)
{
    UITableViewCell *newCell = [tableView cellForRowAtIndexPath:
                                indexPath];
    newCell.accessoryType = UITableViewCellAccessoryCheckmark;

    UITableViewCell *oldCell = [tableView cellForRowAtIndexPath:
                                checkedData];
    oldCell.accessoryType = UITableViewCellAccessoryNone;

    checkedData = indexPath;

}
if (newRow == oldRow) {
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

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

    } else {

        // cell.accessoryType = UITableViewCellAccessoryNone;
    }
    checkedData = indexPath;
}
 }

当返回表视图类时,应保留先前的状态。那我该如何访问呢?

   - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    if(checkedData == indexPath) // Doesn't works
      {

    cell.accessoryType = UITableViewCellAccessoryCheckmark;
     }

请帮帮我。

由于

1 个答案:

答案 0 :(得分:1)

一旦你到达范围的末尾,变量就不可用了(我不知道它们是否为零或已发布,我只知道你不能使用它们)。

您要做的是A)将该值保存到持久存储 B)制作持久变量。

A)将对象设置为存储(在本例中为NSUserDefaults,因为它很容易:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
prefs = [setObject:checkedData forKey:@"checkedData"];

然后,要按照您想要的方式检查对象,您可以这样做:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
if([[prefs objectForKey:@"checkedData"] compare: indexPath]== NSOrderedSame){
cell.AccessoryType = UITableViewCellAccessoryCheckMark;
}

B)将对象保存为持久变量:

在你的.h:

@interface ... : ...{

}

@property(nonatomic, retain) NSIndexPath *checkedData;

@end

在.m:

@implementation 
@synthesize checkedData;
@end

现在,要设置此变量:

self.checkedData = indexPath;

要检查它:

if([self.checkedData compare:indexPath] == NSOrderedSame){
cell.accessoryType = UITableViewCellAccessoryTypeCheckMark;
}

确实没有太大的区别,由你来决定你想要什么。但是,如果您使用NSUserDefaults,请记住数据在启动时仍然存在。如果您不想这样,但想要使用它,则必须在关闭应用时清空对象:[prefs removeObjectForKey:@"checkedData"];

快乐编码,

赞恩