【问题标题】:How to properly work with nibs using swift?如何使用 swift 正确使用笔尖?
【发布时间】:2019-04-09 10:06:43
【问题描述】:

我有几个关于笔尖的问题。

  1. 如何在 View Controller 中动态或以编程方式将 nib 加载到 UIView 上? 我知道您可以通过在此处输入 nib 的 swift 类来添加 nib 的自定义类:

Custom Class

我正在寻找的是如何更改该属性,例如在按下按钮时我想删除或添加它。我尝试实例化 swift 文件,但无法完成。我还尝试更改 .xib 文件的所有者,但它只需要一个 UIView,所以我不能让我的 View Controller 成为它的所有者。我尝试使用

view.addSubiew(view: UIView)

但我不知道如何将我的 Nib 文件正确实例化为 UIView。它一直要求一个 NSCoder,我也不知道如何实例化一个。如果有人能告诉我如何添加和删除有用的自定义类,那将会很有帮助。

  1. 如何将数据从 View Controller 传递到 nib?

  2. 笔尖完全加载后如何运行函数?这是 .xib 文件的 swift 类的代码。

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)    
        if (self.subviews.count == 0) {
            guard let view = loadViewFromNib() else {return}
            view.frame = self.bounds
            self.addSubview(view)
            mainView = view
            -> btn.layer.cornerRadius = 5
        }
    }
    
    private func loadViewFromNib() -> UIView? {
        let bundle = Bundle(for: type(of: self))
        let nib = UINib(nibName: "NibFile", bundle: bundle)
        return nib.instantiate(withOwner: self, options: nil).first as? UIView
    }
    

这可以很好地加载视图,但是每当我尝试在代码块中运行其他任何内容时,例如标记的位置(我想在加载视图后更改按钮的角半径),我总是得到一个 nil IBOutlet .它只是一直说按钮为零。我在哪里添加这个功能?

我也试过这样做:

override func awakeFromNib() {
    btnLogin.layer.cornerRadius = 5
}

仍然没有,我在这里感到困惑,研究走到了死胡同,或者只是我不需要的东西。任何帮助将不胜感激。谢谢!

【问题讨论】:

标签: ios swift xcode nib


【解决方案1】:

所以我做了很多测试并想出了这些:

  1. 如何在 View Controller 中动态或以编程方式将 nib 加载到 UIView 上?

我删除了所需的初始化?从 nib 调用函数,然后在视图控制器中初始化它。基本上我移动了从所需的 init 加载 nib 文件的代码?功能到我想加载它的任何地方,比如某个视图控制器上的按钮按下事件。我只是添加这个:

func loadView(nibName: String, uiview: UIView) {
    let view: UIView = Bundle.main.loadNibNamed(nibName, owner: self, options: nil)?[0] as! UIView
    view.frame = uiview.bounds
    view.autoresizingMask = [.flexibleHeight, .flexibleWidth]
    uiview.addSubview(view)
}

uiview 是我要添加笔尖的视图。

  1. 如何将数据从 View Controller 传递到 nib?

我在 nib 中调用一个函数并将数据作为参数传递。

  1. 笔尖完全加载后如何运行函数?

如果我按照我在第一个问题中所做的操作,那么我可以在

中运行任何函数
override func awakeFromNib() {
}

它会在 nib 加载后运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-13
    相关资源
    最近更新 更多