从 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的主要内容,如果未能解决你的问题,请参考以下文章

viewDidLoad和loadView之间的区别?

iOS presentViewController 不调用 viewDidLoad

ViewDidLoad 未按正确顺序执行操作 - Firebase、Swift

如何在 [self dismissModalViewControllerAnimated:YES] 之后调用 viewDidLoad;

在 ViewDidLoad 上执行 Segue

Swift:如何使滚动视图执行子视图控制器 viewDidLoad