2013-06-16 2 views
1

UINavigationBar 속성 프로그래밍 방식으로에 약간의 변경을 가하고 싶습니다. - viewDidLoad: 또는 -initWithNibName:이 가장 적합한 장소이며 그 이유는 무엇입니까?UINavigationBar 속성을 변경하는 가장 좋은 장소는 무엇입니까?

+1

프로그래밍 방식으로 어디에서나 변경할 수 있습니다. –

+0

나는 그것을 알고 있지만 어느 것이 가장 좋은지 물었습니다. –

+0

어떤 속성이 있습니까? 탐색 막대를 만들고 소유합니까? – Wain

답변

2

– viewDidLoad은 이러한 종류의 변경을 수행하는 이상적인 기능입니다.

이름에서 알 수 있듯이이 함수가 호출 될 때보기가 메모리로 완전히로드되고 이런 종류의 변경을하면 안됩니다.

– viewWillAppear: 또는 – viewDidAppear:에 이러한 변경을 제안하지 않으므로보기가 나타날 때마다 호출됩니다. 표시 될 때마다 탐색 모음 속성을 변경하려는 경우 유용합니다. 나는 상황이 매우 어려울 것이므로 – viewDidLoad을 한 번만 부름으로써 제안한다.

-initWithNibName:은 nib 파일에서 컨트롤러 인스턴스를 생성합니다. 이 기능에서 언급 한 작업을 수행 할 수 있지만 올바른 상태가 아닐 수 있으므로 때때로 이상하게 작동 할 수 있습니다. Apple Docs도 제안합니다 "If you want to perform additional initialization after the nib file is loaded, override the viewDidLoad method and perform your tasks there."

+0

업데이트 내 대답 – stosha

+0

당신은 initWithNibName에 대해 언급하지 않았다. 그 방법은 어떨까요? –

+0

@ShaheerPalolla 답변을 업데이트했습니다. – Adithya

0

내 ViewControllers의 navigationBar 속성이 다른 경우 다음 방법으로 변경할 수 있습니다. UIViewController에서 다음 메서드를 재정의합니다.

- (void) viewWillDisappear: (BOOL) animated 
{ 
    [super viewWillDisappear: animated]; 

    [self.navigationItem setTitleView: nil]; 
} 

- (void) viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear: animated]; 

    [self.navigationItem setTitleView: titleView]; 
} 

작동합니다.

관련 문제