2017-12-05 9 views
0
없이

은 이제 스토리 보드를 사용하지 않고 iOS 앱을 구축 연습 해요,하지만 난이 문제를 해결하려면이, 내가있는 UIView BannerView라는 정의를 만든 배경 (UIView의)와 제목 (UILabel의)를 추가하고, MainVC에이 BannerView을 호출했지만이 응용 프로그램을 실행하면 함수 setupSubviews()에서 충돌이 발생하고 이유를 알 수 없습니다.사용자 정의 UIView의 스토리 보드

import UIKit 
import SnapKit 

class BannerView: UIView { 

    var background: UIView! 
    var title: UILabel! 

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

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

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

    func setupSubviews() { 
     background.backgroundColor = .gray 
     title.text = "INHEART" 

     self.addSubview(background) 
     self.addSubview(title) 
    } 

    override func layoutSubviews() { 
     background.snp.makeConstraints { make in 
      make.width.equalTo(ScreenWidth) 
      make.height.equalTo(BannerHeight) 
      make.left.top.right.equalTo(0) 
     } 

     title.snp.makeConstraints { make in 
      make.width.equalTo(100) 
      make.center.equalTo(background.snp.center) 
     } 
    } 

} 




class MainVC: UIViewController { 

    var bannerView:BannerView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     bannerView = BannerView(frame: CGRect.zero) 
     view.addSubview(bannerView) 
    } 

} 
+0

'background' 및'title' 개체는 어디에 생성합니까? ('var background : UIView!'는 단지 ** 유효한 객체를 참조하기 위해 설정해야만하는 변수를 선언합니다.) –

+0

@PhillipMills in BannerView –

+0

게시 한 코드에 따르지 않습니다. –

답변

1

귀하의 특성은

var background: UIView! 
var title: UILabel! 

당신은 당신의 init 메소드에 다음을 초기화 할 필요가 초기화되지 않는 것 같습니다

self.background = UIView() 
self.title = UILabel() 

당신은 당신이 초기화해야합니다 클래스 속성에 풀기 힘을 사용하는 경우 init 메소드 엑스 코드는이에 대해 불평해야하고 오류 메시지가 그들에게

self.background = UIView() 
self.title = UILabel() 

를 초기화하십시오 배경 뷰를 초기화하고 있지 유사한 오류를

1

를 표시해야합니다 당신은 XIB를 사용하여 사용자 지정보기를 만들려면 따르십시오 Custum View

0

먼저 self.background = UIView() 및 self.title = UILabel()을 초기화해야합니다.

설정하기 전에 setupSubviews() 함수에서 초기화 할 수 있지만 값을 할당 할 수 있습니다.