我有一个UITableView,它通过一个实现NSFetchedResultsControllerDelegate的控制器从CoreData填充。如何让它自动选择第一行(并激活tableView:didSelectRowAtIndexPath消息)?
tableview用于各种谓词查询,因此我怀疑在UIViewController生命周期(viewDidLoad等)上工作的解决方案,但我是平台的新手,所以我打开了。
我尝试过各种各样的东西,但我不确定调用堆栈中的位置。我试过在tableView:cellForRowAtIndex:方法中调用cell.selected = true
,但这最终会使单元格变黑(并且不会触发选定的回调方法)
一个tagent问题,包含所有委托和核心数据协议,是否意味着异步数据获取(多线程)?或者是NSFetchedResultsController在同一个线程中调用所有相关的方法?也许我只是害怕,如果它是异步的,那么竞争条件很难在以后排除故障。
答案 0 :(得分:0)
当选择单元格时,无法添加注释以询问您要执行的操作,因此我将不得不猜测。
如果要将单元格标记为已选中,则应使用accessoryType属性,例如:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
...
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
...
}
另一方面,如果你试图根据选择第一个单元格来执行某些逻辑,或者甚至显示一个新视图,那么这个逻辑应该是一个方法,你可以在数据加载后简单地调用它。 / p>
答案 1 :(得分:0)
这样做:
if (indexPath.section == 0 && indexPath.row == 0) {
//select first row by default
[self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionBottom];
//then populate detail view with corresponding managedObject
[self tableView:tableView didSelectRowAtIndexPath: indexPath];
}
当然,假设您已经正确编码了didSelectRowAtIndexPath。