来自 ViewController 的 UINavigation 控制器

Posted

技术标签:

【中文标题】来自 ViewController 的 UINavigation 控制器【英文标题】:UINavigation Controller from a ViewController 【发布时间】:2021-08-18 08:50:54 【问题描述】:

我正在尝试将 SecondViewController 作为导航从 HomeViewController 推送,但还没有导航。但是,在我按下 SecondViewController 后,会发生转换,但没有显示导航栏。从 ViewController 作为导航执行转换的最佳方式是什么?

我在 AppDelegate 中所做的(我在 appdelegate 中所做的,因为我在处理 pushNotifications 响应)是验证当前控制器是否有导航:

extension UIApplication 
    
    class func getTopViewController(base: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? 
        
        if let nav = base as? UINavigationController 
            return getTopViewController(base: nav.visibleViewController)
            
         else if let tab = base as? UITabBarController, let selected = tab.selectedViewController 
            return getTopViewController(base: selected)
            
         else if let presented = base?.presentedViewController 
            return getTopViewController(base: presented)
        
        return base
    

因此,如果导航可用,我将其返回,然后调用另一个函数:

if let _topVC = UIApplication.getTopViewController(), UserHelper.shared.user.cpf != nil
            _topVC.didAcceptPushNotification()
        

因此,由于 ViewController 有一个 Navigation,我创建了一个 ViewController 的 Extension 来设置导航前进:

extension UIViewController
    @objc func didAcceptPushNotification() 
        DeepLinkManager.shared.checkDeepLink(navigationController: navigationController)
    

那我就说:

let notificationCenterVC = NotificationCentralListViewController(user: UserHelper.shared.user, notificationSpotlightId: nil)
        self.navigationController?.pushViewController(notificationCenterVC, sender: self)

但是在 VC 转换后没有显示导航栏。我做错了什么?

【问题讨论】:

【参考方案1】:

最后我发现了错误。基本上我打电话给self.navigationController?.navigationBar.isHidden = false 在推送 SecondViewController 之前,导航出现了:

private func goToCentralDeNotificacoes() 
        let notificationCenterVC = NotificationCentralListViewController(user: UserHelper.shared.user, notificationSpotlightId: nil)
        self.navigationController?.navigationBar.isHidden = false
        self.navigationController?.pushViewController(notificationCenterVC, animated: true)
    

【讨论】:

以上是关于来自 ViewController 的 UINavigation 控制器的主要内容,如果未能解决你的问题,请参考以下文章

来自 ViewController 的 UINavigation 控制器

检查来自另一个 ViewController 的按钮

swift 在应用程序的任何位置获取最顶层的viewController(通常来自appDelegate)。获取当前可见的viewController。

访问包含来自父 ViewController 的 UIView 组件

来自 AppDelegate 的当前 viewController 崩溃/空屏

如何使用来自不同 ViewController 的 JSON 响应填充 UITableView?