UIViewController를 사용하지 말고 그냥 UIView 클래스를 확장하고 기능을 계속 확장하십시오.
추가 한 각 하위보기 (예 : 버튼)에 포인터를 저장하여 나중에 액세스 할 수 있도록하십시오.
는 예를 들어, 단추 레이블 제목을 변경하기위한 사용자 정의 세터가 될 것이다, 사용자 정의 세터를 정의 등등
- (void) setButton1Title:(NSString*)str forState:(UIControlState)state{
//You can add some control here
if ([str length] > 20) return;
[_button1 setTitle:str forState:state]; //_button1 is my reference to the button
}
그리고있다. 하위보기에 대한 직접 액세스를 제공하지 말고 대신 방법을 사용하십시오.
또한 "layoutSubviews"메서드를 사용하여보기가 사용자 정의보기에 표시되는 방법을 정의 할 수 있습니다.
희망이 있으면 도움이됩니다.
편집 : 귀하의 경우에는, lauoutSubviews 방법을 사용하는 이유는 표시되지 않습니다하지만 난 말하려고 있었는지를 보여주고 싶다.
예를 들어 응용 프로그램에서 "연락처"개체를 나타내는 UIView 클래스를 만들어야한다고 가정 해 보겠습니다.
@interface ContactView : UIView{
UILabel* _nameLabel;
UILabel* _ageLabel;
Contact* _contact;
}
@property (retain) Contact* contact;
@end
@implementation ContactView
@synthetize contact = _contact;
-(id)initWithContact:(Contact*)c{
self = [super init];
if (self) {
_nameLabel = [[UILabel alloc] init];
_nameLabel.frame = CGRectZero;
[self addSubview:_nameLabel];
[_nameLabel release];
_ageLabel = [[UILabel alloc] init];
_ageLabel.frame = CGRectZero;
[self addSubview:_ageLabel];
[_ageLabel release];
self.contact = c;
}
}
- (void) layoutSubviews{
[super layoutSubviews];
_nameLabel.frame = CGRectMake(0.0f, 0.0f, 200.0f, 25.0f);
_ageLabel.frame = CGRectMake(0.0f, 25.0f, 200.0f, 25.0f);
if (self.contact){
_nameLabel.text = self.contact.name;
_ageLabel.text = self.contact.age;
}else{
_nameLabel.text = @"Unavailable";
_ageLabel.text = @"Unavailable";
}
}
- (void) setContact:(Contact*)c{
self.contact = c;
[self layoutSubviews];
}
@end
체크 아웃은 "layoutSubiews는"레이블에 대한 올바른 프레임과 데이터를 설정하는 데 사용됩니다 방법 :
이 내가 할 것 인 것이다. 일반적으로보기를 재사용해야하는 사용자 지정 UITableViewCells를 만들 때 많이 사용합니다.
혼란 스러울 지 알려주세요.
또한 UIControl 서브 클래 싱을 고려하십시오 – Felix