2010-08-06 4 views
0

나는 UILabels 및 UIImageViews를 배치 한 UIView 하위 클래스와 해당 xib 파일을 만들었습니다. 이 사용자 지정 UIView 여러 복사본을 UIViewController 넣을 싶습니다.맞춤형 UIView를 만드는 방법은 무엇입니까?

내가 그렇게하면 인터페이스 빌더에서 비어있는 것처럼 보이고 앱이로드 될 때 표시되지 않습니다. 이 메서드를 만들기 위해 UIView 하위 클래스에서 구현해야하는 메서드는 무엇입니까?

답변

5

가장 쉬운 방법은 File 소유주가 NSObject로 설정된 펜촉을 만들고 레이아웃 요소가 포함 된 하나의보기가 포함 된 펜촉을 만드는 것입니다.

그런

NSArray *arr = [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:nil options:nil]; 
UIView *fv = [[arr objectAtIndex:0] retain]; 

// now you have the view, do something with it: 
fv.center = CGPointMake(100,100); 
[self.view addSubview:fv]; 

파일의 소유자와 아무것도 할 필요가 없습니다; 여기서도 아무 것도하지 않도록 설정됩니다.

2

nib 파일을 사용하여 테이블보기 셀을 만드는 것과 비슷합니다. Here은이를 수행하는 방법을 설명하는 페이지입니다.

사용자 정의보기의 경우 콘센트를 UIViewController 하위 클래스에두고 사용자 정의보기 nib (.xib) 파일의 UIViewController 서브 클래스를 "파일 소유자"로 설정해야합니다. 그런 다음 생성 한 콘센트를 최상위 뷰 객체에 연결합니다 (다시 사용자 정의보기 nib 파일에 있음).

그런 다음 당신이 당신의 뷰 컨트롤러 코드에서 사용자 정의보기를 인스턴스화 할 때마다, 전화 : 당신은 추가

[[NSBundle mainBundle] loadNibNamed:<custom view nib name> owner:self options:nil]; 

콘센트가 다음 사용자 정의보기의 새 인스턴스를 가리 키도록 설정됩니다.

이 접근법의 유일한 단점은 인터페이스 빌더에서 그래픽 방식이 아닌 프로그래밍 방식으로보기 컨트롤러에서 사용자 정의보기의 인스턴스를 프로그래밍 방식으로 배치해야한다는 것입니다.

또 다른 방법은 UIView 하위 클래스에 프로그래밍 방식으로 라벨 및 이미지를 작성한 다음 다른 UIView 하위 클래스처럼 인터페이스 빌더에 추가 할 수 있습니다.

+0

UI 요소를 사용자 지정 UIView에 추가하려면 어떤 방법을 구현해야합니까? 그것은'- (id) initWithCoder : (NSCoder *) 디코더'입니까? – xmr

+0

내 새로운 대답을 참조하십시오, 당신은 출구 바이올린을 생략하고 loadNibNamed에 의해 반환 된 배열을 사용할 수 있습니다. – mvds

+0

@xmr : 저는 평범한 오래된'init'을 생각합니다. –

0

편집 : 불행히도 Xcode 4.0에서는이 기능이 제거되었습니다.

인터페이스 빌더에서 하위보기를 구성한 후에는 새 그룹을 만들 수 있습니다 (라이브러리 창의 아래쪽에있는 톱니 버튼 사용). 하위보기 개체 (이미지 및 레이블 포함)를 목록보기 즉 레이아웃보기가 아님) 다시 라이브러리 창으로 이동하십시오.

그런 다음 라이브러리의 내장 객체처럼 인터페이스 빌더보기 또는 창에보기 서브 클래스의 여러 인스턴스를 그래픽으로 추가 할 수 있습니다.

+1

낡은 링크가 있습니다. – Jonny

+0

새로운 링크가 있습니까? 그런 재미있는 일을 위해서. –

관련 문제