添加附件到UITableView

时间:2012-02-21 13:10:27

标签: iphone objective-c ios uitableview

我在屏幕上显示了一段UITableView。在每个单元格中都有歌曲和艺术家的名字。在后台,在线搜索每个歌曲和艺术家姓名(使用Spotify API)。它找到播放一首歌的URL,然后转到下一首歌! :)听起来很简单......但我想要的是找到每首歌曲时,Checkmark配件会出现在那一行中。

目前我已经有了以下代码来执行此操作...

[[table cellForRowAtIndexPath:[NSIndexPath indexPathForRow:currentConnectionNumber inSection:0]] setAccessoryType:UITableViewCellAccessoryCheckmark];
[table setNeedsDisplay];

但所有发生的事情都是在找到所有歌曲之后,然后出现勾选标记......为什么会这样,我怎么能一次显示一个复选标记?

感谢

3 个答案:

答案 0 :(得分:1)

您需要在tableView:cellForRowAtIndexPath:

中设置复选标记
- (void)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *reuseIdentifier = @"cell";
    UITableViewCell *cell = nil;

    cell = [tableView dequeueReusableCellForIdentifier:reuseIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier] autorelease];
    }

    NSString *cellTitle = [self cellTitleForRowAtIndexPath:indexPath]; // You need to implement this method
    BOOL hasURL = [self hasURLForRowAtIndexPath:indexPath]; // You need to implement this method

    cell.textLabel.text = cellTitle;

    if (hasURL)
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    else
        cell.accessoryType = UITableViewCellAccessoryNone;

    return cell;
}

然后在您的请求完成时重新加载单元格

- (void)myRequestFinished:(SomeKindOfWebRequest *)webRequest {

    NSIndexPath *indexPathToReload = [self indexPathForWebRequest:webRequest]; // You need to implement this method
    NSArray *indexPaths = [NSArray arrayWithObject:indexPathToReload];

    [self.tableView reloadRowsAtIndexPaths:indexPaths withRowAnimtation:UITableViewRowAnimationNone];
}

答案 1 :(得分:0)

我认为您可以根据自己的要求设置bool标志而不是这样做,并在

中添加复选标记逻辑
  

的cellForRowAtIndexPath:

如果该标志为真,则添加附件复选标记否则不要

  if (isValid) {

        cell.accessoryType = UITableViewCellAccessoryCheckmark;

    }
    else{

        cell.accessoryType = UITableViewCellAccessoryNone;
    }

答案 2 :(得分:0)

您是否正在使用

重新加载tableView
  

[yourtableView reloadData]

当您的数据修改时。