gpt4 book ai didi

ios - 能够从 Storyboard 和 ViewController 加载 xib

转载 作者:行者123 更新时间:2023-11-28 16:09:07 26 4
gpt4 key购买 nike

我正在尝试创建一个完美的解决方案,以直接从代码和 Storyboard 中创建自定义 UIView 子类。但是,我没有找到任何解决方案。

对于通过 Storyboard的 IBDesignable 解决方案,我遵循了这个例子 http://supereasyapps.com/blog/2014/12/15/create-an-ibdesignable-uiview-subclass-with-code-from-an-xib-file-in-xcode-6并且工作完美。

但是如果我尝试通过调用此扩展方法通过 UIViewController 调用此子类:

extension UIView {
class func loadFromNibNamed(nibNamed: String, bundle : NSBundle? = nil) -> UIView? {
return UINib(
nibName: nibNamed,
bundle: bundle
).instantiateWithOwner(nil, options: nil)[0] as? UIView
}
}

它崩溃并提示未命中 此类与键的键值编码不兼容

有没有人找到可以与我分享的解决方案来获得这两种可能性?

我需要它,因为我应该在 Storyboard 中使用这个 UIView 以及 UITableview SectionHeader

最佳答案

为了保留这两种情况,我更喜欢在我的子类声明中写这个:

@IBDesignable class CustomView: UIView {

var view: UIView!

@IBOutlet weak var button: UIButton!
@IBOutlet weak var label: UILabel!


func xibSetup() {
view = loadViewFromNib()
view.frame = bounds
view.autoresizingMask = [UIViewAutoresizing.flexibleWidth, UIViewAutoresizing.flexibleHeight]
addSubview(view)
}

func loadViewFromNib() -> UIView {

let bundle = Bundle(for: type(of: self))
let nib = UINib(nibName: "CustomView", bundle: bundle)
let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView

return view
}


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

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

通过这种方式,我可以在我的 Storyboard 中看到并添加它。在 ViewForHeaderInSection 方法中,我这样写:

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {

let header = UIView()

let view:CustomView = CustomView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: 30))

view.label.text = "header title: \(section)"

header.addSubview(view)


return header

}

所以它有效;)

关于ios - 能够从 Storyboard 和 ViewController 加载 xib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39816898/

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