2016-11-09 5 views
1

Я создал пользовательский UIView, который я создаю с помощью объекта ConnectDetailItem.Переменные ноль в awakeFromNib

код моего пользовательского вида:

class InfosConnectView: UIView { 

    var view: UIView! 

    @IBOutlet weak var categorie: UILabel! 
    @IBOutlet weak var distance: UILabel! 
    @IBOutlet weak var followers: UILabel! 
    @IBOutlet weak var descriptionTextView: UITextView! 

    var connectDetailsItem:ConnectDetailsItem! 

    convenience init(connectDetailsItem:ConnectDetailsItem, frame:CGRect) { 
     self.init(frame: frame) 
     self.connectDetailsItem = connectDetailsItem 
     xibSetup() 
    } 

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

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

    func xibSetup() { 
     view = loadViewFromNib() 

     // use bounds not frame or it'll be offset 
     view.frame = bounds 

     // Make the view stretch with containing view 
     view.autoresizingMask = [UIViewAutoresizing.flexibleWidth, UIViewAutoresizing.flexibleHeight] 

     view.layer.borderWidth = 1 
     view.layer.borderColor = UIColor(hex: "#DDDDDD").cgColor 

     // Adding custom subview on top of our view (over any custom drawing > see note below) 
     addSubview(view) 
    } 

    func loadViewFromNib() -> UIView { 

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

     return view 
    } 

    override func awakeFromNib() { 
     super.awakeFromNib() 

     //Infos Connect 
     self.categorie.text = "\(self.connectDetailsItem.category)" 
     self.categorie.text = "\(self.connectDetailsItem.category)" 
     if (self.connectDetailsItem.distance < 1000) { 
      self.distance.text = "\(self.connectDetailsItem.distance) m" 
     } else { 
      let distance:NSString = NSString(format: "%.01f", Float(self.connectDetailsItem.distance)/1000) 
      self.distance.text = "\(distance) km" 
     } 
     if(self.connectDetailsItem.followCount < 2) { 
      if(self.connectDetailsItem.followCount < 1) { 
       self.followers.text = "0 abonné" 
      } else { 
       self.followers.text = "\(self.connectDetailsItem.followCount) abonné" 
      } 
     } else { 
      self.followers.text = "\(self.connectDetailsItem.followCount) abonnés" 
     } 
     self.descriptionTextView.text = self.connectDetailsItem.description 
    } 

} 

В awakeFromNib(), connectDetailItem является nil. Зачем ?

Я мой взгляд создании экземпляра, как это: let viewInfos = InfosConnectView(connectDetailsItem: self.connectDetailsItem, frame: CGRect(x: 0, y: 9, width: self.view.frame.width, height: 200))

Я установить точки останова и перед входом в функцию connectDetailItem awakeFromNib не равна нулю.

+0

Проверьте адрес вида. Может быть, это разные образцы взглядов? –

+0

Если я прокомментирую все строки в awakeFromNib(), просмотр отобразится правильно. – MichelRobico

+0

Вы сказали, что проблема не в «правильном» отображении. "connectDetailsItem" ничтожно. Проверьте адреса в памяти. Вы можете сделать это в отладчике. Это выглядит так: «0x12345678» –

ответ

1

Я нашел решение. я поставил код в функции loadViewFromNib так:

func loadViewFromNib() -> InfosConnectView { 

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

     //Infos Connect 
     view.categorie.text = "\(self.connectDetailsItem.category)" 
     if (self.connectDetailsItem.distance < 1000) { 
      view.distance.text = "\(self.connectDetailsItem.distance) m" 
     } else { 
      let distance:NSString = NSString(format: "%.01f", Float(self.connectDetailsItem.distance)/1000) 
      view.distance.text = "\(distance) km" 
     } 
     if(self.connectDetailsItem.followCount < 2) { 
      if(self.connectDetailsItem.followCount < 1) { 
       view.followers.text = "0 abonné" 
      } else { 
       view.followers.text = "\(self.connectDetailsItem.followCount) abonné" 
      } 
     } else { 
      view.followers.text = "\(self.connectDetailsItem.followCount) abonnés" 
     } 
     view.descriptionTextView.text = self.connectDetailsItem.description 

     return view 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^