2009-10-02 6 views
0

내가 읽은 문서에 따르면, 그들은 항상 클래스에서 하위 뷰를 정의해야한다는 것을 보여줍니다. 이렇게 :ObjectView-C에서 UIView를 변수로 정의 할 수 있습니까?

@interface PolygonView : UIView. 

나는 UIView에서 상속해야합니다.

NSObject에서 상속 한 클래스에 UIView 유형의 변수를 정의 할 수 있습니까? 그런 다음 인터페이스 작성기에 정의 된 UIView에 해당 변수를 연결합니다. 일반적으로보기 XIB을하거나 밖으로 드래그하여 (보기를 만들, (void)drawRect:(CGRect)rect

+0

UIView의 하위 클래스를 원하지 않는 이유가 있습니까? 다른 클래스가 뷰의 드로잉을 정의 할 수 있도록 UIView에 대한 대리자 메서드가 없습니다. – nall

+0

레이블, 슬라이드와 같은 다른 구성 요소와 매우 비슷하지만 간단하게 정의 할 수 있습니다. 나는 이것을 사용했다. CGRect frame = CGRectMake (100, 100, 140, 21); \t [pogview initWithFrame : [프레임]]; \t [pogview drawRect : frame]; – Khoa

답변

0

예, UIView를 가리키는 일반 NSObject 하위 클래스의 변수를 정의 할 수 있습니다. 그러나 당신이한다면, 물론 drawRect:을 오버라이드 할 수 없습니다 - 그 객체는 UIView에 대한 참조만을 가지며 뷰 자체는 아닙니다. int 변수와 비슷하지만 그 변수를 포함하는 객체가 int임을 의미하지는 않습니다.

보기의 그림을 덮어 쓰려면보기를 만들어야합니다. 여전히 외부에서 UIView 하위 클래스와 상호 작용하는 별도의 클래스를 가질 수 있습니다.

+0

나는 여러 번 전에 바닐라 UIView를 사용 해왔다. 'backgroundColor'를 설정할 수 있고 기본적으로 색깔있는 사각형을 가지고 있습니다. 뿐만 아니라 서브 뷰용 일반 컨테이너로도 사용할 수 있습니다. 아마도 포스터가 찾고있는 것이 아니지만 그런 식으로해야하는 합법적 인 이유가 있습니다. – jbrennan

+0

@jbrennan : 그게 무슨 소리 죠? 나는 네가 그렇게 할 수 없다고 결코 말하지 않았다. – Chuck

+0

나는 UIView가 서브 클래 싱 없이도 유용하다는 것을 때때로 언급하고 싶었다. 그것은 당신의 대답과 함께 작동합니다. – jbrennan

2

는 일반적으로 당신이 인터페이스 빌더에서 다음이

@interface MyView : UIView { 
// Declare IBOutlets here if you wish or other instance variables you may need 
} 
@end 

@implementation MyView 

- (void)drawRect:(CGRect)rect { 
// Drawing stuff 
} 

처럼 뭔가를 그리고 있습니다 - 문제는 내가 무시할 수 없다는 것입니다 사용자 정의 UIView 객체를 XIB의 다른 UIView에 배치하여 하위 뷰로 만든 다음 Inspector 창에서 클래스를 MyView로 설정합니다. 그런 다음 MyView 인터페이스 선언에 정의한 IBOutlet을 연결할 수 있습니다.

관련 문제