ios - 以编程方式添加自定义 UIButton fatal error

标签 ios swift uibutton

<分区>

我正在使用以下代码创建自定义圆形 UIButton。我想以编程方式添加此 UIButton。当我尝试这样做时,iOS 崩溃了。它在 InterfaceBuilder 中运行良好。

Xcode 给我这个错误。

fatal error: init(coder:) has not been implemented:

我应该怎么做才能修复它?任何建议将不胜感激。

这是我用于 Round UIButton 的代码。

    import UIKit

    @IBDesignable
    class RoundButton: UIButton {

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

        required init?(coder aDecoder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }

        initWithCoder
        override func awakeFromNib() {
            setupView()
        }

        override func prepareForInterfaceBuilder() {
            super.prepareForInterfaceBuilder()
            setupView()
        }

        func setupView() {
            let radius = self.frame.size.height / 2
            layer.cornerRadius = radius
        }

    }

最佳答案

如果是我,我会完全避免初始化器:

import UIKit

@IBDesignable
class RoundButton: UIButton {

    override func awakeFromNib() {
        setupView()
    }

    override func prepareForInterfaceBuilder() {
        super.prepareForInterfaceBuilder()
        setupView()
    }

    func setupView() {
        let radius = self.frame.size.height / 2
        layer.cornerRadius = radius
    }
}

类似的东西应该可以工作。您从 awakeFromNib 调用 setupView,所以我认为没有必要从初始化器内部调用它。

如果您出于某种原因需要编写自己的 init(coder:) 版本,那么像下面这样简单的方法可能会奏效:

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

关于ios - 以编程方式添加自定义 UIButton fatal error ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38150528/

相关文章:

ios - CALayer 上的隐式动画没有动画

ios - 通过单击另一个按钮更改按钮文本垂直对齐方式

ios - 如果在设备上部署了新版本的应用程序,是否可以保留旧版本的数据?

ios - 升级 iOS 应用的 Fabric 和 Crashlytics

Swift:从 NSTextField 获取一行

swift - AVAudioplayer 没有在 viewDidAppear 上重置

ios - Xcode 9.3 Swift嵌套自定义框架单元测试和iTunesConnect上传

ios - 仅当符合协议(protocol)时才扩展 UIButton

iphone - 我在哪里可以获得精美的红色和绿色 UIButtons 之类的 "End Call"等?

ios - 快速组合 : Unexpected backpressure behaviour with zip operator