如何使用Swift快速处理笔尖?

时间:2018-11-06 01:46:56

标签: ios swift xcode nib

我对笔尖有一些疑问。

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

Custom Class

我要寻找的是如何更改该属性,例如在按钮上按下我想删除或添加的属性。我尝试实例化swift文件,但无法将其删除。我还尝试过更改.xib文件的所有者,但它只需要一个UIView,因此无法将View Controller设置为其所有者。我尝试使用

view.addSubiew(view: UIView)

但是我不知道如何正确地将Nib文件实例化为UIView。它一直在问一个NSCoder,我也不知道如何实例化一个。如果有人告诉我如何添加和删除自定义类,这会有所帮助。

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

  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 。它只是一直说该按钮为nil。在哪里添加此功能?

我也尝试这样做:

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

仍然为零,我在这里感到困惑,研究陷入僵局或只是我不需要的东西。任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

所以我做了很多测试,并提出了以下建议:

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

我删除了所需的init吗?从笔尖的功能,只需在视图控制器中对其进行初始化。基本上,我将代码从所需的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传递到笔尖?

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

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

如果我做的是第一个问题,那么我可以在

中运行任何功能
override func awakeFromNib() {
}

它在笔尖加载后运行。