2016-07-18 2 views
1

Я создал простой пользовательский класс UIView.Пользовательский класс 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) 

Как вы можете видеть на картинке, он выходит из строя всегда, когда я пытаюсь установить любое значение. Как это может быть?

enter image description here

+0

bannerTitle еще не существует. – vikingosegundo

ответ

1

Насколько я вижу, это не розетки, и я не вижу никакого кода инициализации. То, что вы должны сделать, это на самом деле создать эту метку с помощью:

self.bannerTitle = UILabel() 

или с рамкой, так что вы уверены, что вы можете увидеть, что ярлык:

self.bannerTitle = UILabel(frame: frame) 

второго один будет создавать вид с размером Посмотреть.

Я предлагаю вам создать xib-файл и подключить розетки - вам будет легче поддерживать представление и просматривать изменения на лету.

1

bannerTitle не инициализируется при попытке обновить свой текст. Изменение:

var bannerTitle: UILabel! 

к:

var bannerTitle: UILabel! = UILabel() 

или, более сжато,

var bannerTitle = UILabel() 

Что вы делаете с вашими переменные (: UILabel часть) просто указывает, какой тип объектов являются ; он не инициализирует их.