我想要实现的目标很简单,尽管从一开始就想到了。最后我发现很难处理。
我想推送一个表格视图作为选择列表,用户选择一个单元格,单元格字符串作为选定字符串发送到前一个视图,简单吧??
先看两张图
困扰我的是:
我想提供(至少)两个按钮,左边一个是导航控制器自动生成的后退按钮,右边一个用于编辑。导航控制器默认有两个按钮(据我所知)。所以没有“完成”按钮的位置,用户应该点击然后确认并弹出到上一个视图。因此,当用户点击一个单元格时,例如“穿着”,我希望发生以下情况,自动和视觉上对用户可见:
- 用户可以看到“房屋”单元格未标记
- 然后用户可以看到“穿着”单元格被标记
- 然后经过一点时间间隔(比如 0.2 秒),弹出到上一个视图并自动更新选择。
起初我认为这很容易,但事实并非如此。这是我的代码,但工作有线
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
dispatch_queue_t queue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0ul);
dispatch_async(queue, ^{
//unmark previous cell
if (selectedIndexPath!=nil) {
[[self.tableView cellForRowAtIndexPath:selectedIndexPath]setAccessoryType:UITableViewCellAccessoryNone];
}
selectedIndexPath=indexPath;
//get the selected cell to mark
UITableViewCell *cell=[self.tableView cellForRowAtIndexPath:indexPath];
[cell setAccessoryType:UITableViewCellAccessoryCheckmark];
dispatch_sync(dispatch_get_main_queue(), ^{
//wait a little
[NSThread sleepForTimeInterval:0.2];
//return to previous view
NSLog(@"here.........");
if ([objectToUpdateCategory respondsToSelector:@selector(updateCategoryTo:withSelectedIndexPath:)]) {
NSLog(@"sending.......... update info");
[objectToUpdateCategory updateCategoryTo:cell.textLabel.text withSelectedIndexPath:selectedIndexPath];
NSLog(@"sent update info");
}
[self.navigationController popViewControllerAnimated:YES];
});
});
棘手的是,如果我把[self.navigationController popViewControllerAnimated:YES] ; 到最后,视图不会在视觉上更新取消标记和标记步骤并立即返回上一个视图。起初,当我没有考虑取消标记的事情时,代码中的“队列”东西可以在弹出之前直观地执行标记步骤,但有时不起作用。我不知道我的代码是否正确,实际上我没有不太了解苹果的这种队列技术。但我很确定它与 NSThread / queue 或其他处理并发有关。我检查了苹果文档一整天,没有找到直接的答案。
希望有人可以帮助我,在此先感谢:)