首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用创建自定义UIView时出现问题,在@IBOutlet中发现nil时出现Xib错误

使用创建自定义UIView时出现问题,在@IBOutlet中发现nil时出现Xib错误
EN

Stack Overflow用户
提问于 2019-06-28 08:47:15
回答 2查看 70关注 0票数 -1

在"contentLabel.text = content“行发现nil时出错

打开/关闭commonInit

代码语言:javascript
复制
class SuccessfulView: UIView{

  @IBOutlet weak var contentLabel: UILabel!

  convenience init(content:String ,frame: CGRect){
    self.init(frame:frame)
    contentLabel.text = content

  }

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



  }
  override init(frame: CGRect) {
    super.init(frame: frame) // calls designated initializer

  }



  func commonInit(){
    Bundle.main.loadNibNamed("SuccessfulFooterContentView", owner: self, options: nil)
    addSubview(contentLabel)
  }

}

创建具有xib的UIView的子类

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-28 09:15:50

问题是如果你调用UIViewinit(frame:),它不会被你的接口构建器(storyboard/Xib)初始化。

因此您应该使用Xib来初始化视图。就像-

代码语言:javascript
复制
var content: String = ""

static public func instance(content: String, frame: CGRect) -> SuccessfulView? {
    let view = Bundle.main.loadNibNamed("SuccessfulFooterContentView", owner: self, options: nil) as? SuccessfulView
    view?.frame = frame
    // and save your content
    view?.content = content
    return view
}

然后在awakeFromNib函数中设置您的内容

代码语言:javascript
复制
override func awakeFromNib() {
   super.awakeFromNib()
   contentLabel.text = content
}
票数 0
EN

Stack Overflow用户

发布于 2019-06-28 09:28:10

你是说

代码语言:javascript
复制
Bundle.main.loadNibNamed("SuccessfulFooterContentView", owner: self, options: nil)

相信这会导致这个变量

代码语言:javascript
复制
@IBOutlet weak var contentLabel: UILabel!

待设置。但是,除非nib中的文件所有者被设置为SuccessfulView类,并且连接了contentLabel插座,否则不会出现这种情况。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56799806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档