【问题标题】:Subclassing UINavigationBar in Swift在 Swift 中继承 UINavigationBar
【发布时间】:2015-06-29 13:15:42
【问题描述】:

我正在尝试创建一个自定义 UINavigationBar 类,然后使用 Storyboard 将其设置为我的 UINavigationController 的 NavigationBar 的类。

这是我的UINavigationBar 类的代码:

class CustomNavBar: UINavigationBar {

    override func drawRect(rect: CGRect) {
        super.drawRect(rect)
        // Drawing code
        self.backgroundColor = UIColor.orangeColor()

        let myLabel = UILabel(frame: CGRect(x: 0, y: 4, width: 600, height: 36))
        myLabel.backgroundColor = UIColor.purpleColor()
        myLabel.textColor = UIColor.yellowColor()
        myLabel.text = "Custom NavBar!"

        self.addSubview(myLabel)
    }

}

然后,在 Interface Builder 中,我使用 Identity Inspector 将其设置为我的 UINavigationControllerNavigationBar 的类。

当我运行应用程序时 - 它会冻结。它挂断了LaunchScreen.xib 并且不执行任何操作。

为什么要这样做?这样做的正确方法是什么?

【问题讨论】:

  • 也许你需要在某个地方打电话给super.drawRect
  • 听起来不错 - 但它没有这样做......(不过,我会将它添加到我的代码中,在我的问题正文中)
  • 您是否收到任何错误消息
  • 不,它只是在 LaunchScreen.XIB 屏幕上冻结 - 这是我从未见过的。很奇怪。 (要明确:它没有崩溃,也没有产生任何错误 - 它只是运行,然后在 LaunchScreen 上冻结。)
  • 是的,这很奇怪。我能够复制它,但我不知道为什么会发生这种情况。您可以尝试仅继承 UINavigationController 并在 viewDidLoad() 中编辑其 navigationBar 属性。我刚刚测试过它并没有冻结。

标签: ios swift uinavigationcontroller uinavigationbar subclass


【解决方案1】:

在 Swift 上:

File-New-File- iOS Source - Cocoa Touch 类 - 选择 UINavigationBar 的子类并将其命名为 - CustomNavigationBar。

class CustomNavigationBar: UINavigationBar {

        override init(frame: CGRect) {
            super.init(frame: frame)

            self.backgroundColor = UIColor.redColor()

        }
        required init(coder aDecoder: NSCoder) {
            super.init(coder: aDecoder)!
        }
        override func drawRect(rect: CGRect) {

        }   
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-24
    • 1970-01-01
    • 1970-01-01
    • 2017-11-24
    • 2015-11-08
    • 1970-01-01
    • 2020-03-18
    相关资源
    最近更新 更多