swift - 从 nib 实例化 UIView 导致无限循环问题

标签 swift xcode swift3 custom-controls nib

我正在尝试使用我创建的自定义 View 。

我使用 nib 的实例化,但它会导致无限循环,我不确定如何修复。有什么想法吗?

这是运行结果的图片:

enter image description here

这是导致问题的代码:

// MARK:  - Init & Setup
// Needed for IBDesignable



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

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

func setup(){
    view = loadViewFromNib()
    view.frame = bounds
    view.autoresizingMask = UIViewAutoresizing(rawValue: UIViewAutoresizing.RawValue(UInt8(UIViewAutoresizing.flexibleWidth.rawValue) | UInt8(UIViewAutoresizing.flexibleHeight.rawValue)))
    addSubview(view)
}

func loadViewFromNib() -> UIView{
    let bundle = Bundle(for:type(of: self))
    let nib = UINib(nibName: "LoginView", bundle: bundle)         // TEST: changin bundle from bundle-> nil

    let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView
    return view
}

编辑:这是连接的图像

enter image description here

谢谢:)

最佳答案

快速回答: 由于 Xib 中的顶级 View 将其 自定义类 设置为 YourCustomeView,因此 xib 加载过程 loadViewFromNib 将再次调用您的 initWithCoder 方法⛔️🚫♽。

快速修复: 在 Xib 中,不要将 View 的自定义类设置为 YourCustomeView,而是将 YourCustomeView 设置为 Xib 的 The File Owner

更多信息 https://medium.com/@anandin02/loading-custom-views-in-ios-the-right-way-bedfc06a4fbd

关于swift - 从 nib 实例化 UIView 导致无限循环问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49127025/

相关文章:

ios - 从应用程序委托(delegate)呈现导航 Controller 后,状态栏和导航标题和项目会稍后显示

ios - DJI iOS SDK (Swift) - 当iPhone通过USB连接Mavic Remote 时,App无法连接飞行器

ios - TableView :dequeueReusableCellWithIdentifier issues with "global" constant

ios - 如何使用 RxTest 测试 combineLatest observable?

swift - 在scenekit中设置游戏场景时出错

ios - SwiftUI:如何在取消计时器后重新启动它?

swift - 无法在 Swift playground 中加载纹理图集?

swift - Xcode 7.3 升级到 8.3.1 后链接器错误

ios - 解析 SDK 方法在 Xcode 6.3 Beta 中不起作用

ios - 在 Xcode 7/Swift 2 中播放音频不工作