无法从基础UIViewController类继承属性

时间:2016-03-22 21:42:21

标签: ios xcode swift inheritance

我是iOS开发的新手,这可能是一个简单的问题。我的应用程序将有许多视图控制器将共享类似的属性。我创建了一个基础视图控制器类,它是UIViewController的子类。所有其他视图控制器都是基本视图控制器的子类。但是,我在基本视图控制器类中设置的属性不会被继承。例如,导航栏按钮应该都是绿色,但在构建应用程序时是默认的蓝色。

这是基本视图控制器类:

class BaseViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationItem.leftBarButtonItem?.tintColor = UIColor.greenColor()
    self.navigationItem.rightBarButtonItem?.tintColor = UIColor.greenColor()
}

这是上面基类视图控制器的其他视图控制器的代码:

class AboutViewController: BaseViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    self.title = NSLocalizedString("About", comment: "About page title")
}

我已经在网上搜索了类似的问题,但无法找到答案。我的代码中没有任何根本错误。我正在使用Xcode 7.2.1并在iOS 8+上进行测试。也在Xcode 7.2.3 beta中测试过,但结果相似。

1 个答案:

答案 0 :(得分:1)

从我看来,这不是一个继承问题。如果在BaseViewController的viewDidLoad中设置断点,它确实会执行该代码。我认为你的问题是如何改变色调颜色。在iOS中自定义导航栏是一件很痛苦的事情,我通常会偏离使用导航控制器,最后只是创建我自己的顶部栏视图,我可以完全自定义。

如果您尝试更改整个应用程序的左右栏项目的色调颜色,请将此代码放在application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?)函数内的AppDelegate文件中:

UINavigationBar.appearance().tintColor = UIColor.greenColor()

这是我创建的博文,介绍如何更改UINavigationBar的其他颜色:Navigation Bar Colors