2015-02-03 4 views
0

필자는 IB_designable을 조사해 보았습니다. 정말 멋진 기능입니다. 그러나 내가 가진 한 가지 문제는 각 뷰에 대해 UIView를 하위 클래스에 추가해야한다는 것입니다. 그리고 그 하위 클래스 내에서 initWithCoder : 메서드와 prepareForInterfaceBuilder 내부에 UI 요소를 지정해야합니다 :외부에서 IB_designable

그러나 클래스의 UI 요소를 지정할 수 있기를 원합니다.

외부에서 설정할 수있는 공용 속성이 있고 UI 작성기에서 볼 수있는 UIView 하위 클래스를 만들고 싶습니다.

이것이 가능합니까?

업데이트 :

저는 IBInspectible에 대해 알고 있습니다. 이렇게하면 속성 속성에서 속성을 사용할 수 있습니다. 이것은 내가 외부에서 의미하는 것이 아닙니다.

IB_DESIGNABLE 
@interface DesignableLabel : UILabel 
@end 
@implementation DesignableLabel 
@end 

@interface SomeClass : UIViewController { 
    IBOutlet DesignableLabel *DL; 
} 
@end 
@interface SomeClass 
- (void)prepareForInterfaceBuilder { 
    DL.text = @"Hello World" 
} 
@end 

DesignableLable은 UILabel의 하위 클래스입니다. UILabels에는 텍스트 속성이 있습니다. SomeClass가 어떻게 든 그 속성을 설정하기를 원합니다. 일반적으로 앱을 실행하면 문자열이 표시됩니다. 그러나 앱을 실행하는 데 어려움을 덜어주기 위해 Interface builder에 표시하고 싶습니다. 그래서 입력 할 때 그 값을 볼 수 있습니다.

답변

0

저는 다른 사람들이 도움이되도록 제 질문에 대답 할 것입니다. 사용자 정의 런타임 속성을 사용하여 카테고리 메소드를 호출하여 IB_Designable 객체를 외부에서 설정할 수 있습니다.

IB_DESIGNABLE 
@interface DesignableLabel : UILabel 
@end 

@implementation DesignableLabel 
@end 

@implementation DesignableLabel (Runtime_TheTextYouWant) 
    - (void)setTheText:(BOOL)b { 
     if (!b) return; 
     self.text = "The text you want"; 
    } 
@end 

@implementation DesignableLabel (Runtime_SayHelloToMyLittleFriend) 
    - (void)setMyLittleFriend:(BOOL)b { 
     if (!b) return; 
     self.text = "Say hello to my little friend"; 
    } 
@end 

내 DesignableLabel에 대해 두 가지 카테고리를 만들었습니다. 지금은 스토리 보드 내의 ViewController에 두 개의 UILabels를 배치하면, 다음 첫 번째 UILabel의를 위해 내가 부울의 유형으로 키 경로

theText 

를 호출하여 사용자 정의 런타임 속성을 사용할 수 있습니다, DesignableLabel에 모두 UILabel의에게의를 서브 클래스 화해, 체크 표시를하십시오. 그런 다음 해당 DesignableLabel 객체는 setTheText : category 메소드에 지정된 텍스트를 갖습니다.

마찬가지로, 제 2 DesignableLabel 객체에 대해, 당신은 "설정"키 경로가 단어를 사용하지 않는

myLittleFriend 

공지 사항 키 경로를 호출하여 사용자 정의 런타임 속성을 사용하고 것이이 낮은 경우 첫번째 단어. setMyLittleFriend : myLittleFriend이됩니다.

결론적으로 각 IB_DESIGNABLE 객체에 대한 하위 클래스를 만들지 않아도됩니다.

0

공용 API를 사용하여 외부에서 설정하려는 공용 속성은 IBInspectable 키워드로 표시되어야합니다. 예는 :

@property (readwrite) IBInspectable BOOL activityIndicatorOn; 

당신은 Apple's website에이 키워드에 대한 더 많은 정보를 찾을 수 있습니다.

+0

속성 속성에 속성을 추가하는 방법에 대해 설명합니다. 그건 내가 묻고있는 게 아니야 ... 제발 내 업데이 트를 참조하십시오. 바라기를 바꿔서 ... – DerrickHo328