2016-11-09 8 views
1

개체 ConnectDetailItem으로 인스턴스화하는 사용자 지정 UIView를 만들었습니다. 내 사용자 정의보기의변수는 awakeFromNib에서 nil입니다.

코드 :

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()에서 connectDetailItemnil입니다. 왜 ?

내가 이렇게 내 시야를 실체화 : let viewInfos = InfosConnectView(connectDetailsItem: self.connectDetailsItem, frame: CGRect(x: 0, y: 9, width: self.view.frame.width, height: 200))

내가 중단 점을 설정하고로 awakeFromNib 기능 connectDetailItem에 들어가기 전에 nil이 없습니다.

+0

뷰 주소를 확인하십시오. 어쩌면 그것은 다른보기 견본인가? –

+0

awakeFromNib()의 모든 행에 주석을 달면보기가 올바르게 표시됩니다. – MichelRobico

+0

문제가 "올바르게"표시되지 않는다고 말했습니까? "connectDetailsItem"은 nil입니다. 메모리의보기 주소를 확인하십시오. 디버거에서 할 수 있습니다. 다음과 같이 보입니다 : "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 
    }