2010-06-04 4 views
2

initWithNibName 메소드를 "대체"하기 위해 UIViewController 서브 클래스에 대한 사용자 정의 초기화 메소드를 구현하고 싶습니다. UIVIewController 사용자 정의 init 메소드

코드입니다 : (?를 XIB 아직로드되지 아마 때문에)

- (id) initWithMessage:(NSString *)message { 
    if ((self = [super initWithNibName:@"ToolTip" bundle:nil])) { 
     label.text = message; 
    } 

    return self; 
} 

라벨이 XIB에서로드하지만이 시점에서 레이블에 대한 참조가 전무하다. 누구든지 그 해결책을 알고 있습니까? 감사합니다

답변

11

이 질문은 오래된 질문이지만 올바른 대답은보기가로드 된 후 추가 설정을 수행하기 위해 viewDidLoad 메서드를 사용하는 것입니다. 뷰는 필요할 때까지로드되지 않으며 메모리 경고가 수신되면 언로드 될 수 있습니다. 따라서 뷰 컨트롤러의 뷰는 init 메서드에서 다루지 않아야합니다.

1

레이블을 프로그래밍 방식으로 선언하고 펜촉에서 시작하지 말고 초기화해야합니다.

UILabel *label가 정의 @property@synthesize와 클래스 변수라고 가정 :

이는 방법이다.

- (id) initWithMessage:(NSString *)message { 

    if ((self = [super initWithNibName:@"ToolTip" bundle:nil])) { 
     label = [[UILabel alloc] init]; 
     label.text = message; 
     [self.view addSubView:label]; 
    } 

    return self; 
} 

"dealloc"방법으로 레이블을 해제하십시오. 희망이 도움이됩니다.

관련 문제