推送 viewController 时未调用 viewDidLoad

Posted

技术标签:

【中文标题】推送 viewController 时未调用 viewDidLoad【英文标题】:viewDidLoad is not being called while pushing a viewController 【发布时间】:2018-02-15 06:43:16 【问题描述】:

这里我试图通过单击一个按钮导航到另一个 viewController。

它正在导航到下一个 viewController,但 viewDidLoad() 没有在这里调用

这是我编写的用于在单击按钮时导航到另一个 viewController 的代码

@IBAction func nextButtonClicked(_ sender: Any) 
    let OrdersVC = self.storyboard?.instantiateViewController(withIdentifier: “LoginViewController") as! LoginViewController
    self.navigationController?.pushViewController(OrdersVC, animated: true)

这是我的 viewController(我需要导航)

@IBOutlet weak var activeButton: UIButton!
@IBOutlet weak var upcomingButton: UIButton!

override func viewDidLoad() 
    super.viewDidLoad()

这里可以进入课堂,但 viewDidLoad() 本身并没有调用。

我应该如何做到这一点?

[![这是我的故事板][1]][1]

【问题讨论】:

所以你告诉我们你在storyboard中至少有2个viewControllers,第一个是导航控制器的root,你调用push 2 vc并且没有得到viewDidload?您是否至少看到了过渡? 您能解释一下您是如何构建视图控制器的吗?发布您的故事板屏幕截图? @tereks,是的,我正在使用超过 2 个视图控制器。第一个 viewController 是根视图控制器。我将第一个视图控制器嵌入到导航控制器中。是的,我可以看到过渡。我在 viewController 2 中的引用正在调用。但在 viewdidload() 内部却没有得到 @SuganyaMarlin。我也使用了 viewWillAppear()。它也没有被调用 实际上会调用 viewDidLoad()。显示你的故事板 【参考方案1】:

您的问题是该 VC 的课程没有在 IB 中解决;确保您加载的类和情节提要 ID 与您要加载的类匹配。例如,要加载:

  let OrdersVC = self.storyboard?.instantiateViewController(withIdentifier: “secondID") as! secondViewController
self.navigationController?.pushViewController(OrdersVC, animated: true)

图片:

【讨论】:

我只给出了正确的标识符。请参阅我编辑的问题。在那里你可以找到我的带有身份检查器的故事板屏幕截图 你能发一个这个问题的演示吗【参考方案2】:

看到您的问题时,我想到了两件事:

    检查nextButtonClicked方法是否连接到按钮(那里的代码看起来没问题,所以可能只是没有执行)。

    1234563 .

【讨论】:

nextButtonClicked 已连接。在点击按钮后,它也会进入该按钮操作。【参考方案3】:

只需在推送代码之间写下以下行

@IBAction func nextButtonClicked(_ sender: Any) 
    let OrdersVC = self.storyboard?.instantiateViewController(withIdentifier: “LoginViewController") as! LoginViewController

_ = OrdersVC.view // write this line

    self.navigationController?.pushViewController(OrdersVC, animated: true)

【讨论】:

写了那行,现在 viewDidLoad 正在调用。但它根本没有导航到下一个 viewController。它仅保留在第一个 viewController 中【参考方案4】:

当您从情节提要中实例化 ViewController 时使用的标识符不正确时,通常会发生这种情况。例如

[[self getStoryboard] instantiateViewControllerWithIdentifier:MyVC];

如果MyVC 是某个其他 ViewController 的标识符,则可能会发生这种情况。

【讨论】:

以上是关于推送 viewController 时未调用 viewDidLoad的主要内容,如果未能解决你的问题,请参考以下文章

调试时未调用推送通知扩展

在用户授予接收推送通知的权限时未调用 didRegisterForRemoteNotificationsWithDeviceToken

当 webview 呈现 ImagePicker 时未调用 presentViewController

使用 UITableView 时未调用 switch 语句案例

关闭屏幕时未调用 UICollectionView performBatchUpdates 完成

IBM Worklight 5.0.6.1 - 关闭电话/应用程序时未收到推送通知