2016-07-19 3 views
0

내가 코드에서이 뷰 계층 구조를 시뮬레이션하기 위해 노력하고있어에서 기존의 서브 뷰에 뷰를 추가 할 수 없습니다 따라서이 같은 연결 컨테이너 "은 스토리 보드, 프로그램

"scene" 
    "view Shop Main"      -> `UIView` 
     "view shop scroll"     -> `UIScrollView` 
      "ViewDetail"     -> `UIView` 
       "Shop Connected Container" -> `UIView` 
        "Connected Shop"  -> `UIView` 
        "Connected Shop"  -> `UIView` 
        "Connected Shop"  -> `UIView` 

어떻게이 프로그래밍 방식으로 할 수 있습니까 ?? 각 하위보기 및 xib 파일에 대한 사용자 지정 클래스가 있습니다.

override func viewDidLoad() { 

    /*1*/   let vShopMain = NSBundle.mainBundle().loadNibNamed("viewShopMain", owner: self, options: nil).first as! viewShopMain 
    /*2*/  let vShopScroll = NSBundle.mainBundle().loadNibNamed("viewShopScroll", owner: vShopMain, options: nil).first as! viewShopScroll 

    /*3*/  let vDetail : UIView = NSBundle.mainBundle().loadNibNamed("viewDetail", owner: vShopScroll, options: nil).first as! viewDetail 
// 
// 
    /*4*/  let sConContainer : UIView = NSBundle.mainBundle().loadNibNamed("shopConnectedContainer", owner: vDetail, options: nil).first as! shopConnectedContainer 
    /*5*/  let cShop = NSBundle.mainBundle().loadNibNamed("connectedShop", owner: sConContainer, options: nil).first as! connectedShop 


     cShop.bannerTitle.text = "Shop Title" 

     vShopMain.addSubview(vShopScroll) 
     vShopScroll.addSubview(vDetail) 
     vDetail.addSubview(sConContainer) 
     sConContainer.addSubview(cShop) 


     self.view.addSubview(sConContainer) 

은 또한 동일한 결과이 시도 :

 let vShopMain = UINib(nibName: "viewShopMain", bundle: nil).instantiateWithOwner(nil, options: nil)[0] as! viewShopMain 

     let scroll = UINib(nibName: "viewShopScroll", bundle: nil).instantiateWithOwner(nil, options: nil)[0] as! viewShopScroll 

     let vDetail = UINib(nibName: "viewDetail", bundle: nil).instantiateWithOwner(nil, options: nil)[0] as! viewDetail 

     let sConContainer = UINib(nibName: "shopConnectedContainer", bundle: nil).instantiateWithOwner(nil, options: nil)[0] as! shopConnectedContainer 

     let cShop = UINib(nibName: "connectedShop", bundle: nil).instantiateWithOwner(nil, options: nil)[0] as! connectedShop 

     cShop.bannerTitle.text = "hola" 

     vShopMain.addSubview(scroll) 
     scroll.addSubview(vDetail) 
     vDetail.addSubview(sConContainer) 
     sConContainer.addSubview(cShop) 


     self.view.addSubview(sConContainer) 

그러나 추가 "새로운"보기 다른보기 이하를, 내가 코드에서 파단의 인스턴스를 해요 방법 이입니다 스토리 보드에서 기존보기를 인스턴스화하고 새로운 스토리 보드를 만들지 않으므로 의도 한 동작이 아닙니다.

나는 스토리 보드 계층 구조의 순서를 따르고 있습니다. 또한보기는 사용자 정의 클래스와 연결되어 있으며 xib 파일이 있습니다. 하지만 내 앱을 실행할 때 이상한 문제가 발생했습니다

여기서 내가 뭘 잘못하고 있니? 제발 도와주세요

+0

'지금보기는 것이다 해당 컨트롤러가 인스턴스화 될 때 자동으로로드됩니다. 컨트롤러 클래스에서 필요한 뷰의 콘센트를 만들어 사용할 수 있습니다. loadNibNamed를 사용하여 프로그래밍 방식으로로드 할 필요가 없습니다. –

+0

예, 뷰가 생성됩니다. 하지만 프로그래밍 방식으로 뷰 수를 설정하려면 1이 될 수도 있고 10이 될 수도 있습니다.이 뷰를 여러 번 인스턴스화하여 둘 이상을 만들 필요가 있습니다. 어떻게해야합니까? – user3033437

답변

0

그 충돌 이유를 알아낼 수 있습니다. loadNibNamed은 단일 뷰가 아닌 객체 배열을 반환합니다. 당신이 viewShopScroll을 반환 가정 및 강제를 풀기 때문에 그래서 확실히

let vShopScroll = NSBundle.mainBundle().loadNibNamed("viewShopScroll", owner: self, options: nil) as! viewShopScroll 

을 충돌합니다. 당신은 당신이

let vShopMain = NSBundle.mainBundle().loadNibNamed("viewShopMain", owner: self, options: nil).first as! viewShopMain 

뿐만 아니라 다른 모든 경우에 대해 동일한을 수행 first 객체를 가지고있다 이후 첫 번째 줄이 작동 말했듯이보기의 사용자 정의 클래스 영역이 충분히 storyboard` 먹으 렴에 할당

+0

그래서이 작업을 수행하고 있지만 충돌이 발생합니다. vShopScroll = NSBundle.mainBundle(). loadNibNamed ("viewShopScroll", owner : vShopMain, options : nil) .first as let! viewShopScroll – user3033437

+0

크래시 로그의 내용은 무엇입니까? –

+0

'yuApp.viewShopMain'(0x10a2fcf50) 유형의 값을 'yuApp.viewShopScroll'(0x10a2faf30)으로 캐스팅 할 수 없습니다. – user3033437