【问题标题】:Custom UIView class allways crash when initialized自定义 UIView 类在初始化时总是崩溃
【发布时间】:2016-07-18 13:37:57
【问题描述】:

我创建了一个简单的自定义 UIView 类。

    import Foundation
import UIKit

class customShop : UIView{

    var bannerViewHight: NSLayoutConstraint!
    var bannerViewTop: NSLayoutConstraint!
    var bannerViewLeft: NSLayoutConstraint!
    var bannerViewRight: NSLayoutConstraint!
    var banerDiscount: UIImageView!
    var bannerImageShop : UIImageView!
    var bannerTitle : UILabel!
    var bannerDescription: UILabel!
    var bannerButton: UIButton!


    override init (frame : CGRect) {
        super.init(frame : frame)
        self.bannerTitle.text = ""

    }

    convenience init () {
        self.init(frame:CGRect.zero)
    }

    required init(coder aDecoder: NSCoder) {
        fatalError("This class does not support NSCoding")
    }
}

我是这样实例化的:

var mainView : customShop = customShop()
mainView.bannerTitle.text = "hola"
let desc = super.getLanguageFromDict(self.areaDetailValues.texts_description)

正如您在图片中看到的那样,当我尝试设置任何值时,它总是会崩溃。这怎么可能?

【问题讨论】:

  • bannerTitle 还不存在。

标签: swift uiview swift2


【解决方案1】:

据我所知,这些不是插座,我也没有看到任何初始化代码。您应该做的实际上是通过以下方式创建该标签:

self.bannerTitle = UILabel()

或带有框架,以便您确定可以看到该标签:

self.bannerTitle = UILabel(frame: frame)

第二个将创建具有视图大小的视图。

我建议您创建 xib 文件并连接插座 - 您可以更轻松地维护视图并即时查看更改。

【讨论】:

    【解决方案2】:

    bannerTitle 在您尝试更新其文本时未初始化。变化:

    var bannerTitle: UILabel!
    

    到:

    var bannerTitle: UILabel! = UILabel()
    

    或者,更简洁地说,

    var bannerTitle = UILabel()
    

    您对变量所做的事情(: UILabel 部分)只是指定对象的类型;它不会初始化它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-25
      • 1970-01-01
      • 1970-01-01
      • 2018-11-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多