从 viewDidLoad() 执行 Segue
Posted
技术标签:
【中文标题】从 viewDidLoad() 执行 Segue【英文标题】:Perform Segue From viewDidLoad() 【发布时间】:2017-12-06 20:11:42 【问题描述】:我是 ios 新手。我有一个非常相似的要求,就像我正在工作的 android 项目一样。要求是在我的 LoginActivity onCreate()
中,我正在检查某些条件,如果是真的,那么我将使用 Intent
启动我的下一个 Activity。
我正在尝试从我的 iOS 应用程序中执行相同的功能。在我的 LoginViewController viewDidLoad()
中,在检查了一些条件后,我正在调用 [self performSegueWithIdentifier:@"myNextControllerSegue" sender:nil];
。
但是,我的 ViewController 没有更改为下一个视图控制器。任何帮助将不胜感激。
【问题讨论】:
在主线程中调用你 segue 或移动到 viewdidappear 或 viewwillappear 确保你在Storyboard
中配置了同名myNextControllerSegue
的segue。
@Anbu.Karthik 如果我在 viewWillAppear() 中调用它,它就不起作用。当我将逻辑移动到 viewDidAppear() 时,它正在工作,但我看到一个闪烁的地方,我也可以看到我的登录 UI。如何避免这种闪烁?
***.com/a/41887007/5461400
如果你在一个视图控制器的展示过程中发现你不想展示它,那么你发现为时已晚。在提交 VC 之前执行检查您的登录条件的逻辑,然后创建您需要的。
【参考方案1】:
需要在正确的位置执行 segue。您尝试在层次结构中的第一个视图之前加载另一个视图。因此 viewDidAppear 被称为您有一个完全加载的视图要修改。
- (void)viewDidAppear:(BOOL)animated
[super viewDidAppear:animated];
[self performSegueWithIdentifier:@"myNextControllerSegue" sender:nil];
要消除这种闪烁,只需在 viewWillApear
方法中隐藏视图即可。
否则,您可以在主线程中进行快速搜索,如下所示
dispatch_async(dispatch_get_main_queue(), () -> Void in
//perform segue
)
【讨论】:
我在可以看到旧视图的地方看到轻微的闪烁。如何避免这种情况?? @HelloWorld 只是在您的 viewWillApear 方法中隐藏视图。【参考方案2】:viewDidLoad:
不用于 segue 执行。您应该调用viewDidAppear:
中的segue,那里已经建立了视图结构。
【讨论】:
【参考方案3】:在您的 Storyboard 上,单击您的视图控制器,转到“连接检查器”部分,然后在“触发的转场”中,将“+”按钮拖到您想要访问的控制器上。
现在点击你的 segue 并进入“属性检查器”部分,并为标识符设置“myNextControllerSegue”。
【讨论】:
以上是关于从 viewDidLoad() 执行 Segue的主要内容,如果未能解决你的问题,请参考以下文章
iOS presentViewController 不调用 viewDidLoad
ViewDidLoad 未按正确顺序执行操作 - Firebase、Swift
如何在 [self dismissModalViewControllerAnimated:YES] 之后调用 viewDidLoad;