在 UINavigationController 中设置自定义导航栏类

Posted

技术标签:

【中文标题】在 UINavigationController 中设置自定义导航栏类【英文标题】:Set custom navigation bar class in UINavigationController 【发布时间】:2014-09-09 10:29:57 【问题描述】:

我有一个自定义导航栏:

class Name_UINavigationBar: UINavigationBar 
    // code

我想以编程方式将其设置为我的导航控制器。所以我尝试了:

var navController : UINavigationController = UINavigationController(
            navigationBarClass: object_getClass(Name_UINavigationBar),
            toolbarClass: nil)
// code

但它崩溃说:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', 
    reason: 'MyProject.Name_UINavigationBar is not a subclass of UINavigationBar'

【问题讨论】:

【参考方案1】:

试试这个。

let navController = UINavigationController(navigationBarClass: YourNavigationBar.self, toolbarClass: nil)

我遇到了同样的错误,并且能够让它再次像那样工作。

【讨论】:

【参考方案2】:

在 Swift 中,不支持获取对象类的方法。您的问题几乎肯定与 object_getClass 方法有关,我认为从 Beta 5 开始不再支持该方法。

我想像这样的 API 要么会被更新、重写,要么很快就会被弃用。现在你需要在 Objective-C 中完成。

【讨论】:

我在 xcode 6 beta 7 上,它没有说明 object_getClass。但你说的似乎是一个很好的解释。

以上是关于在 UINavigationController 中设置自定义导航栏类的主要内容,如果未能解决你的问题,请参考以下文章

在 UINavigationController 内的 UITabBarcontroller 中添加 UINavigationController?

从嵌入在 UINavigationController 中的一个视图控制器到另一个 UINavigationController

(Swift) 在嵌套在 Main UINavigationController 中的 UINavigationController 和 UITabController 之间切换

关闭 UINavigationController 并呈现另一个 UINavigationController

带有主 UINavigationController 和详细 UINavigationController 的 UISplitViewcontroller

UINavigationController 标题和按钮