2016-09-05 1 views
0

Ive는 이전에 스토리 보드에서 사용한 사용자 지정 xib를 만들었으므로 사용자 지정보기 인스턴스를 만들어 크기를 조정 한 다음 하위보기로 추가하여 uiscrollview에 추가하고 싶습니다. 필자는 내보기 컨트롤러Swift - 사용자 지정 Xib보기를 프로그램으로 Subview로 추가

let cardView = CardView(coder: NSCoder()) 
cardView!.frame.size.width = 100 
cardView!.frame.size.height = 100 
scrollView.addSubview(cardView!) 

의 viewDidLoad에의 FUNC에 코드 블록을 사용하여 시도하지만이 오류

Terminating app due to uncaught exception 'NSInvalidArgumentException', 
reason: '*** -containsValueForKey: cannot be sent to an abstract object 
of class NSCoder: Create a concrete instance!' 

편집 받고 있어요 :이 CardView에 연결된 빠른 파일에 대한 코드 를 대신에 내가 시도 자동 레이아웃을 사용 .xib

import UIKit 

class CardView: UIView { 
@IBOutlet var view: UIView! 
@IBOutlet weak var cornerView: UIView! 

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

    NSBundle.mainBundle().loadNibNamed("CardView", owner: self, options: nil) 
    self.addSubview(view) 
    view.frame = self.bounds 

    cornerView.layer.cornerRadius = 3 
    cornerView.layer.masksToBounds = true 

    view.layer.shadowOffset = CGSizeMake(1, 5); 
    view.layer.shadowRadius = 2; 
    view.layer.shadowOpacity = 0.2; 
    view.layer.masksToBounds = false 
} 

} 

은 단순히 내가 (이 2 줄에서 수동으로도 단지 머리를 하위 뷰를 추가 테스트 높이와 너비를 초기 설정 iOS 개발에 익숙하지 않음)

cardView!.frame.size.width = 100 
cardView!.frame.size.height = 100 
+1

많은 혼란이 귀하의 질문에 있습니다. 1) 필자는 이전에 스토리 보드에서 사용한 커스텀 xib를 만들었습니다. 커스텀 xib를 만든 방법은 .xib 확장자가있는 별도의 파일을 의미합니다. 그렇다면 스토리 보드에서 어떻게 사용했는지. 나는 어딘가에서 xib의 내용을 사용하고있는 코드를 볼 수 없다는 것을 의미한다. 2) autolayout 제약 조건을 사용하지 않습니다. 3) 코드 양식 xib에서 아무 것도 초기화하지 않습니다. 내가 게시물을 편집하고 특정 구현을 위해 사용하고있는 전체 코드 또는 귀하의 목표가 무엇인지 그리고 내가 가장 좋은 방법을 제시 할 수있는 그래픽을 게시 할 것입니다. –

+0

@MaheshAgrawala 방금 – XvKnightvX

+1

로드북 선을 변경하는 데 도움이되는 게시물 희망을 수정했습니다. 'self.view = NSBundle.mainBundle(). loadNibNamed ("CardView", owner : nil, options : nil) [0] as! UIView' 및 한번 시도하십시오 –

답변

0

보기 초기화를 위해 맞춤 XIB를 사용하는 경우에 사용 된 내용은 다음과 같습니다.

보기의 클래스에서 CardView처럼 코드가 좋아집니다.

class CardView: UIView { 
    @IBOutlet weak var cornerView: UIView! 

    func setupWithSuperView(superView: UIView) { 
     self.frame.size.width = 100 
     self.frame.size.height = 100 
     superView.addSubview(self) 

     cornerView = UIView(frame: self.bounds) 
     cornerView.layer.cornerRadius = 3 
     cornerView.layer.masksToBounds = true 

     view.layer.shadowOffset = CGSizeMake(1, 5); 
     view.layer.shadowRadius = 2; 
     view.layer.shadowOpacity = 0.2; 
     view.layer.masksToBounds = false 
    } 
} 

초기화를 위해이 클래스를 호출하는 곳에서는 이것을 사용하십시오.

let cardView = NSBundle.mainBundle("CardView").loadNibNamed("", owner: nil, options: nil)[0] as! CardView 
cardView.setupWithSuperView(scrollView) 

한번 시도하십시오. 그러나 xib 파일의 첫 번째보기가 CardView 유형인지 확인하십시오. 첫 번째보기의 클래스는 CardView입니다.

+0

스토리 보드에서도 카드보기를 사용합니다. 카드보기를 초기화하지 않으면이 카드보기가 중단되지 않습니까? (저는 약 30 장의 스토리 보드에 수동으로 배치했습니다) – XvKnightvX

+0

나는 당신이 원하는 것을 정확히 얻지 못하고 있습니다. 당신은 xib를 사용한다고 말했지만, 이제는 스토리 보드에서 사용하고 있다고 말했죠. 너는 약 30 가지가 있니? 스토리 보드에 컨트롤러 30 대를 배치하셨습니까? –

+0

나는 당신이 잘못된 접근 방식으로 당신의 요구 사항을 달성하려고 노력하고 있다고 생각합니다. 다른 유형의 목록이 필요한 경우 30 가지 유형의보기를 디자인하고 스크롤보기에서 사용하는 대신 다른 유형의 표보기 셀을 사용할 수도 있습니다. 또는 당신이하고 싶은 정확하게 일. –

관련 문제