2013-11-21 2 views
0

몇 가지 일반적인 메서드를 정의한 UIView를 상속하는 사용자 지정 클래스 C가 있습니다.상속 문제 및 프레임 워크 클래스 확장

이제는 UITextView 개체 A와 UIView 개체 B에 이러한 메서드가 필요합니다. B의 경우, 아버지를 C로 변경해야합니다.

하지만 어떻게해야합니까? 나는 아버지를 C로 직접 변경할 수 없다. 그렇지 않으면 UITextView의 메소드를 잃을 것이기 때문이다.

또한 C에서 일부 속성과 멤버 변수가 있기 때문에 범주를 사용할 수 없습니다.

+0

범주 및 단일 상속이 도구입니다. 다른 목표를 달성하는 방법을 알아 보려면 세부 사항을 살펴 봐야합니다. 그러나 다른 상속과 같은 대안은 없습니다. 그것이 당신이 원하는 것이라면. – danh

답변

1

다중 상속은 Objective-C의 기능이 아닙니다. UITextView 하위 클래스와 UIView 하위 클래스 모두 공통 프로토콜을 구현할 수 있습니다. 물론, 이는 코드를 복제해야한다는 것을 의미합니다.

나는 수 있습니다 당신이 카테고리로 원하는 효과를 얻을 수 있다고 믿습니다. UITextView가있는 UIView의 하위 클래스이기 때문에 당신은 UITextView뿐만 아니라 당신의 UIView 하위에 적용됩니다 (NSHipster에서 차용) 런타임 레버리지 objc/runtime.h

#import "UIView+MyView.h" 
#import <objc/runtime.h> 

static const void *IndieBandNameKey = &IndieBandNameKey;  

@implementation UIView (MyView) 
@dynamic indieBandName; 

- (NSString *)indieBandName { 
    return objc_getAssociatedObject(self, IndieBandNameKey); 
} 

- (void)setIndieBandName:(NSString *)indieBandName { 
    objc_setAssociatedObject(self, IndieBandNameKey, indieBandName, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 
} 

@end 

에서 당신이 UIView의 범주에 넣어 방법을 속성을 추가 할 수 있습니다 아강. 또한 카테고리 메서드에서 이러한 동적으로 생성 된 속성에 액세스 할 수 있으므로 이제 선언 한 "멤버 변수"를 활용할 수 있습니다.