从UITableView保存项目

时间:2013-03-31 00:21:05

标签: ios uitableview plist nsuserdefaults

我正在创建一个基于TableView的应用程序。 tableView正在加载XML feed的外部最后12项。这一切都很完美。

所以现在我想创建一个额外的“保存最喜欢的项目功能”。有两种方法可以实现这一目标:

1。自定义附件按钮

-(void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath 

2。 (自定义)编辑tableview

if ([self.tableView isEditing])

我的问题是:您更喜欢哪个选项,您能举例说明如何实现这一目标吗?

任何认真的答案都将不胜感激。

感谢您的回答。感谢Matt,我用以下代码修复了它:

        NSMutableDictionary *item = [dataArray objectAtIndex:indexPath.row];
    BOOL checked = [[item objectForKey:@"checked"] boolValue];
    //cell.backgroundColor = [UIColor clearColor];
    //cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    UIImage *image = (checked) ? [UIImage   imageNamed:@"first.png"] : [UIImage imageNamed:@"second.png"];
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    CGRect frame = CGRectMake(0.0, 0.0, image.size.width, image.size.height);
    button.frame = frame;
    [button setBackgroundImage:image forState:UIControlStateNormal];
    [button addTarget:self action:@selector(checkButtonTapped:event:)  forControlEvents:UIControlEventTouchUpInside];
    button.backgroundColor = [UIColor clearColor];
    cell.accessoryView = button;

正如您所见,我现在正在使用dataAray。我也使用一个存放“检查的boolian”的plist。这不能正常工作,因为:

  1. 检查标记放置不正确(根据plist)
  2. 当UitableView滚动视图移动时,复选标记会根本改变。
  3. 所以我想创建一个存储所选项目的Id的数组。然后遍历数组以查看数组中是否存在ID。如果是:如果否则为明星:灰色星。

    你认为这是一个很好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

我非常喜欢配件按钮方法。由于编辑模式通常用于删除或重新设置项目,因此用户通常不会在那里查看或期望它执行任何其他功能。

话虽如此,我不建议在不更改其默认图像的情况下使用附件按钮。由于附件按钮的默认图像通常意味着显示有关当前项目的更多详细信息,因此如果不更改为更具描述性的图像,则可能会引起混淆。此外,如果当前项目被标记为收藏(例如,如果它不是最喜欢的灰色星形,并且如果它是金色星形),则最佳地图像应该是不同的。代码应该非常简单:

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

  cell = UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Identifier"];
  if(!cell)
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"Identifier"]

  UIImage *accessoryImage;
  ItemClass *item = [self.items objectAtIndex:indexPath.row];
  // you might want to cache the images instead of creating them for each cell
  if(item.favorite)
    accessoryImage = [UIImage imageNamed:@"goldenStar.png"];  
  else
    accessoryImage = [UIImage imageNamed:@"greyStar.png"];  
  cell.accessoryView = [[UIImageView alloc] initWithImage:accessoryImage];
}

-(void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath {
  ItemClass *item = [self.items objectAtIndex:indexPath.row];
  item.favorite = !item.favorite;

  // update the cell with the new image and any other data you need modified
  [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
}
祝你好运!