gpt4 book ai didi

ios - 从 xib 文件中为对象创建导出

转载 作者:搜寻专家 更新时间:2023-10-31 22:05:29 24 4
gpt4 key购买 nike

我有一个 Hint.xib 文件,其中只有很少的元素(标签、 ImageView 和按钮)。我有一个名为 Hint 的类,它是 UIView 的子类,它加载了这个 xib。

Hint 类的实现如下所示:

import UIKit

@IBDesignable

extension UIView {
class func fromNib<T : UIView>() -> T? {
guard
let nibs = Bundle(for: self).loadNibNamed(String(describing: self), owner: nil, options: nil),
let nib = nibs.first
else {
return nil
}

return nib as? T
}
}

class Hint:UIView {
@IBOutlet weak var hintLabel: UILabel!
private func setup(){

if let view = Hint.fromNib(){
self.addSubview(view)
view.frame = self.bounds
}
}

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

setup()
}


override func prepareForInterfaceBuilder() {
super.prepareForInterfaceBuilder()

setup()
}

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

setup()
}
}

当前设置

目前,在 Storyboard 上,我添加了一个 View Controller ,并将一个 UIView 拖到该 View Controller 的 View 中。之后,我将其自定义类设置为 Hint。此外,我正在使用 @IBDesignable 指令并覆盖了 prepareForInterfaceBuilder() 以在设计中呈现所有内容,这一切都有效,直到我尝试为标签制作导出(hintLabel) 是 Hint.xib 文件的一部分。

我遇到下一个错误:

Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[< NSObject 0x60000001f8a0 > setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key hintLabel.'

我已经选择了我的 Hint.xib 文件 -> 文件的所有者,并在 Identity Inspector 中检查了一切是否正常,看起来一切正常:

enter image description here

通过 IB 或代码更改此标签文本的合适方法是什么。此外,我不能只在 Hint.xib 中更改此标签的文本,因为我可能在加载(从)此 xib 的屏幕上有多个 View ,并且所有这些 View 都应该有不同的文本。我想我在这里遗漏了一些明显的东西......谢谢你的提示 :))

最佳答案

问题是你必须使用“owner:self”从 bundle 加载 xib,所以它应该是这样的:

class Hint:UIView {
@IBOutlet var view: UIView!
@IBOutlet weak var hintLabel: UILabel!
private func setup(){

Bundle.main.loadNibNamed("Hint", owner: self, options: nil)
self.addSubview(view)
view.frame = self.bounds
}

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

setup()
}


override func prepareForInterfaceBuilder() {
super.prepareForInterfaceBuilder()

setup()
}

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

setup()
}
}

也不要忘记在 xib 文件(不是 UIView)中将文件所有者设置为提示类

关于ios - 从 xib 文件中为对象创建导出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41923818/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com