如何使用 swift 正确处理笔尖?
How to properly work with nibs using swift?
我有几个关于笔尖的问题。
- 如何动态或以编程方式将笔尖加载到视图控制器中的 UIView 上?
我知道您可以通过在此处输入笔尖的 swift class 来添加笔尖的自定义 class:
Custom Class
我正在寻找的是如何更改该属性,例如在按下按钮时我想删除它或添加它。我尝试实例化 swift 文件,但我无法将其关闭。我还尝试更改 .xib 文件的所有者,但它只需要一个 UIView,所以我不能让我的视图控制器成为它的所有者。我尝试使用
view.addSubiew(view: UIView)
但我不知道如何将我的 Nib 文件正确实例化为 UIView。它一直要求一个 NSCoder,我也不知道如何实例化一个。如果有人能告诉我如何添加和删除会有帮助的自定义 class,那将会有所帮助。
如何将数据从我的视图控制器传递到笔尖?
笔尖完全加载后,我如何 运行 发挥作用?这是 .xib 文件的代码 swift class.
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
}
这可以很好地加载视图,但是每当我尝试 运行 代码块中的任何其他内容时,例如标记的位置(我想在加载视图后更改按钮的角半径),我一直得到一个零 IBOutlet。它只是一直说按钮是零。在哪里添加这个功能?
我也试过这样做:
override func awakeFromNib() {
btnLogin.layer.cornerRadius = 5
}
仍然是零,我在这里感到困惑,研究走到了死胡同,或者只是我不需要的东西。任何帮助将不胜感激。谢谢!
所以我做了很多测试并想出了这些:
- 如何动态或以编程方式将笔尖加载到视图控制器中的 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 是我要添加笔尖的视图。
- 如何将数据从我的视图控制器传递到笔尖?
我在 nib 中调用一个函数并将数据作为 parameter/s 传递。
- 笔尖完全加载后,我如何 运行 发挥作用?
如果我按照我在第一个问题中所做的那样做,那么我就可以 运行
中的任何函数
override func awakeFromNib() {
}
一旦加载笔尖,它就会 运行。
我有几个关于笔尖的问题。
- 如何动态或以编程方式将笔尖加载到视图控制器中的 UIView 上? 我知道您可以通过在此处输入笔尖的 swift class 来添加笔尖的自定义 class:
Custom Class
我正在寻找的是如何更改该属性,例如在按下按钮时我想删除它或添加它。我尝试实例化 swift 文件,但我无法将其关闭。我还尝试更改 .xib 文件的所有者,但它只需要一个 UIView,所以我不能让我的视图控制器成为它的所有者。我尝试使用
view.addSubiew(view: UIView)
但我不知道如何将我的 Nib 文件正确实例化为 UIView。它一直要求一个 NSCoder,我也不知道如何实例化一个。如果有人能告诉我如何添加和删除会有帮助的自定义 class,那将会有所帮助。
如何将数据从我的视图控制器传递到笔尖?
笔尖完全加载后,我如何 运行 发挥作用?这是 .xib 文件的代码 swift class.
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 }
这可以很好地加载视图,但是每当我尝试 运行 代码块中的任何其他内容时,例如标记的位置(我想在加载视图后更改按钮的角半径),我一直得到一个零 IBOutlet。它只是一直说按钮是零。在哪里添加这个功能?
我也试过这样做:
override func awakeFromNib() {
btnLogin.layer.cornerRadius = 5
}
仍然是零,我在这里感到困惑,研究走到了死胡同,或者只是我不需要的东西。任何帮助将不胜感激。谢谢!
所以我做了很多测试并想出了这些:
- 如何动态或以编程方式将笔尖加载到视图控制器中的 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 是我要添加笔尖的视图。
- 如何将数据从我的视图控制器传递到笔尖?
我在 nib 中调用一个函数并将数据作为 parameter/s 传递。
- 笔尖完全加载后,我如何 运行 发挥作用?
如果我按照我在第一个问题中所做的那样做,那么我就可以 运行
中的任何函数override func awakeFromNib() {
}
一旦加载笔尖,它就会 运行。