ios - 自定义 UIView 使用 init(coder) 初始化,如何使用 init(frame) 初始化它

标签 ios swift uiview

所以我覆盖了 init(frame) 来做一堆事情:

class InputField: UIView {

    override init(frame: CGRect) {
        super.init(frame: frame);
        let label = UILabel(frame: CGRect(x: 8, y: 8, width: 73, height: 30));
        label.text = "I want";
        label.font = UIFont(name: "Avenir-Book", size: 26.0);
        addSubview(label);
        NSLayoutConstraint(item: label, attribute: .leading, relatedBy: .equal, toItem: self, attribute: .leadingMargin, multiplier: 1.0, constant: 8.0).isActive = true;

    }

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

}

问题是调用了第二个 init() 而不是第一个。我在 Storyboard 中设置它的方法是使用一个普通的空 UIView,其类是 InputField。为什么它使用第二个而不是第一个?

我不想以编程方式创建 InputField,因为我更希望看到我在 Storyboard中设置的 View 。如果我遇到困难,我知道该怎么做,但我主要想学习如何以这种方式做到这一点。

编辑:如评论中所述,当前的解决方法是在 init(coder) 中执行该配置代码。但这仍然没有回答:为什么调用它而不是 init(frame)

最佳答案

有不同的便捷方法来帮助初始化 View 。当 View 实际初始化时,只有一个方法(-frame、-coder 等)将被调用。
如果您需要执行任何自定义初始化,您可以使用 common init方法。

关于ios - 自定义 UIView 使用 init(coder) 初始化,如何使用 init(frame) 初始化它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42322731/

相关文章:

ios - 调用 applicationDidEnterBackground 后我有多少时间?

ios - 如何调整 UITableView tableHeaderView 的左右 insets 或 margins?

swift - 在 Swift 的 ViewController 中禁用 IQKeyboardManager

c# - 如何以编程方式将 UI 元素正确添加到 iOS View 中?

objective-c - 使用 objective-c 自定义 UIView

ios - Swift 3、iOS 10.3 - 在启动屏幕期间预加载 UIWebView

ios - UICollectionView 照片库到全屏

ios - 由于其对关系和继承的不同看法,我很难根据我的类图设计适当的核心数据布局

swift - 在 Swift 中移动 UIImageView 的 UIImage 中的 UIView

ios - 如何将类型 'UIImage?' 的值分配给类型 'UIView?'