我在屏幕上显示了一段UITableView。在每个单元格中都有歌曲和艺术家的名字。在后台,在线搜索每个歌曲和艺术家姓名(使用Spotify API)。它找到播放一首歌的URL,然后转到下一首歌! :)听起来很简单......但我想要的是找到每首歌曲时,Checkmark配件会出现在那一行中。
目前我已经有了以下代码来执行此操作...
[[table cellForRowAtIndexPath:[NSIndexPath indexPathForRow:currentConnectionNumber inSection:0]] setAccessoryType:UITableViewCellAccessoryCheckmark];
[table setNeedsDisplay];
但所有发生的事情都是在找到所有歌曲之后,然后出现勾选标记......为什么会这样,我怎么能一次显示一个复选标记?
感谢
答案 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]
当您的数据修改时。