单击行后立即使 pushViewController 转换

Posted

技术标签:

【中文标题】单击行后立即使 pushViewController 转换【英文标题】:Make pushViewController Transition Immediately upon Clicking Row 【发布时间】:2012-12-21 06:54:49 【问题描述】:

我看到应用程序会在单击表格项后立即推送到新的viewController,然后在加载新视图时显示activityIndicator。我知道如何将activityIndi​​cator 添加到ProfileViewController,但是如何在单击项目时立即将表格推送到新控制器而不是等待内容加载?

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

  ProfileViewController *profileViewController = [[ProfileViewController alloc] initWithNibName:@"ProfileViewController" bundle:nil];

  //profileViewController.title = [[news objectAtIndex:indexPath.row] objectForKey:@"name"];
  profileViewController.newsArticle = [news objectAtIndex:indexPath.row];
  [self.navigationController pushViewController:profileViewController animated:YES];

任何帮助或指导都会很棒。谢谢大家!

【问题讨论】:

这段代码不是做你想做的吗?或者,[news objectAtIndex:indexPath.row] 行是否需要时间来执行? @rdelmar,似乎是 [news objectAtIndex:indexPath.row] 行需要很长时间才能加载。如果我删除它,那么应用程序将崩溃,因为它没有任何可参考的内容。 您可以从ViewDidLoadprofileViewController 发布您的代码吗?如果您在ViewDidLoad 中触发一些请求,那么加载需要一些时间,而不是在ViewDidAppear 中触发该请求。 当然@SibaPrasadHota,我实际上在 profileViewController 的 viewDidLoad 中加载了大量其他内容。例如,许多数据库调用、从网络上获取图像等...我需要将其放在 viewDidAppear 中吗? @SibaPrasadHota,你太棒了......你完全勾起了我的记忆。那是我需要做的,把所有的东西都放在 viewDidAppear 而不是 viewDidLoad...谢谢! 【参考方案1】:

在 viewDidAppear 之前,您不会对新的视图控制器进行操作。然后你触发一些异步且不阻塞主线程的东西:

    viewDidLoad:设置活动指示器 viewWillAppear:启动 acritivity 指示器 viewDidAppear:触发异步进程 委托方法/通知/块:处理完成后使用数据更新 UI

【讨论】:

以上是关于单击行后立即使 pushViewController 转换的主要内容,如果未能解决你的问题,请参考以下文章

单击tableview行后如何导航到另一个视图

Angular 8 Material 表在单击时突出显示一行并在单击其他行后保留背景颜色

CakePHP:删除行后如何使自动增量值再次连续

在DataGridView中选择行后关闭窗体

如何使更改立即出现在用户界面中?

单击按钮时如何使HTML页面一直向上滚动? [复制]