推送 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
方法是否连接到按钮(那里的代码看起来没问题,所以可能只是没有执行)。
【讨论】:
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 语句案例