【问题标题】:Swift: Custom UINavigationController not calledSwift:未调用自定义 UINavigationController
【发布时间】:2017-11-20 21:21:31
【问题描述】:

我想以编程方式更改导航控制器的根控制器:

import UIKit
import Foundation

class NavigationController : UINavigationController {
    override init(rootViewController : UIViewController) {
        print("TEST")
        super.init(rootViewController : rootViewController)
    }

    override init(navigationBarClass: AnyClass?, toolbarClass: AnyClass?) {
        print("TEST2")
        super.init(navigationBarClass : navigationBarClass, toolbarClass : toolbarClass)
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }
}

我在故事板中将 NavigationController 类设置为我的 Navigation Controller 的自定义类

控制台不显示我的测试输出。我做错了什么,如何在此处更改根控制器?

【问题讨论】:

    标签: swift xcode storyboard navigationcontroller


    【解决方案1】:

    如果您从Storyboard 实例化您的自定义NavigationController,则您正在调用此方法:

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }
    

    要在控制台中查看您的打印,您必须以编程方式对其进行初始化,例如:

    let navVC = NavigationController(rootViewController: yourVC)
    

    【讨论】:

    • 你说得对,我忘了按要求的方法打印。但是如何更改那里的 rootViewController?
    • 知道了:在下面查看我的答案
    • iOS 开发好诡异...感谢您的帮助!
    • 不客气;)但是如果您从情节提要中初始化导航控制器,请检查您的答案,您可以在那里设置根控制器,在初始化编码器中设置它是不正确的。如果您想随后更改它,您可以更新导航控制器视图控制器数组。
    • 如果我在 viewDidLoad 中的 viewController 中而不是在我的自定义 ViewController 中调用 setViewControllers,“内容视图”会正确更改,但导航控制器的标题不会更新。所以我认为这不是正确的地方吗?如果用户可以在设置中决定他想使用哪个视图,您将在哪里以编程方式设置 rootViewController?
    【解决方案2】:

    知道了:

    import UIKit
    import Foundation
    
    class NavigationController : UINavigationController {
        override init(rootViewController : UIViewController) {
            super.init(rootViewController : rootViewController)
        }
    
        override init(navigationBarClass: AnyClass?, toolbarClass: AnyClass?) {
            super.init(navigationBarClass : navigationBarClass, toolbarClass : toolbarClass)
        }
    
        required init?(coder aDecoder: NSCoder) {
            super.init(coder: aDecoder)
            let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
            let newViewController = storyBoard.instantiateViewController(withIdentifier: "new_main_view") as! ViewController
            self.setViewControllers([newViewController], animated: false)
        }
    }
    

    这是为用户提供相同视图的两个“主题”的推荐方式吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多