创建自定义UIView时出现问题,使用@IBOutlet发现Xib错误为零

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (14)

在“contentLabel.text = content”行找到错误nil

打开/关闭commonInit

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的子类

提问于
用户回答回答于

你是说

Bundle.main.loadNibNamed("SuccessfulFooterContentView", owner: self, options: nil)

相信这会导致这个变量

@IBOutlet weak var contentLabel: UILabel!

要设置。但除非将nib中的文件所有者设置为SuccessfulView类并且连接contentLabel出口,否则它将不会出现。

用户回答回答于

问题是如果你调用init(frame:)a UIView,它将不会被你的界面构建器(storyboard / Xib)初始化。

所以你应该用Xib初始化你的视图。就像-

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函数中设置内容

override func awakeFromNib() {
   super.awakeFromNib()
   contentLabel.text = content
}

所属标签

可能回答问题的人

  • uncle_light

    5 粉丝518 提问7 回答
  • 学生

    3 粉丝476 提问7 回答
  • o o

    4 粉丝494 提问5 回答
  • 富有想象力的人

    3 粉丝0 提问5 回答

扫码关注云+社区

领取腾讯云代金券