4

iOS 4.2 이상용 앱을 개발 중입니다. 내 UINavigationController 서브 클래 싱하여 UIImageView 2 개를 삽입하고 탐색 모음을 사용자 정의로 만듭니다. 모든 것이 잘 작동하지만 약간의 문제가 있습니다. 나는 정의 UIBarButtonItem을 만들어 내보기 컨트롤러 안에 내가 함께 넣어 :UINavigationController 용 사용자 지정 뒤로 버튼 만들기

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:backButton]; 

그것은 너무 작동하지만 문제는 그게 내가에서 호출하기 위해 필요한이 작업을하는 것입니다 : 그래서 그것을

- (void)viewDidAppear:(BOOL)animated ; 

을 애니메이션 후에 만 ​​나타나고 커스터마이징 된 버튼이 1 초 전에 비 사용자 화 된 버튼을 볼 수 있습니다.

은 (내가 viewWillAppear과 노력하지만 아무것도 내비게이션 바에서 추가 없음) 나는이 문제를 해결 할 수있는 해결책을 가지고 있는지 알고 싶습니다

.

추신 : 나는 결코 IB를 사용하지 않으며 모든 것은 프로그래밍 방식으로 이루어집니다.

프랑스에서 감사합니다.

편집 1 : 여기 viewWillAppear 아무것도 표시되지 않은 코드 :

- (void)viewWillAppear:(BOOL)animated { 
    [self setTitle:@"Jeu"]; 

    //Bouton testflight 
    TIFButton *testFeedbackButton = [[TIFButton alloc]init]; 
    [testFeedbackButton setTitle: @"Envoyer un Feedback" forState:UIControlStateNormal]; 
    [testFeedbackButton addTarget:self action:@selector(launchFeedback) forControlEvents:UIControlEventTouchUpInside]; 

    UIBarButtonItem *testFeedback = [[UIBarButtonItem alloc] initWithCustomView:testFeedbackButton]; 

    self.navigationItem.rightBarButtonItem = testFeedback; 

    TIFBackButton *backButton = [[TIFBackButton alloc]init]; 
    [backButton setTitle: @"Retour" forState:UIControlStateNormal]; 
    [backButton addTarget:self action:@selector(popToPrecedentViewController) forControlEvents:UIControlEventTouchUpInside]; 

    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:backButton]; 
} 
+0

* viewWillAppear와 함께 작동해야하지만,'self.navigationItem.leftBarButtonItem'을 지정하기 전에'backButton' 뷰를 인스턴스화/생성해야합니다. –

+0

왜 viewDidAppear에서 호출해야합니까? viewDidLoad에서 왜 작동하지 않습니까? – Canopus

답변

18

의이 두 ViewControllers하는이 A는 맨 위의 경우 B, 당신은 스택에 B를 밀어한다고 가정 해 봅시다 , B가 위에있을 때 표시되는 뒤로 버튼을 사용자 정의하고자합니다.

일반적으로이 작업을 수행하는 방법은 ViewController를 AnavigationItem.backBarButtonItem으로 설정하는 것입니다.

대신에 ViewController BnavigationItem.leftBarButtonItem을 설정하여 탐색 모음의 왼쪽에 맞춤 검색 버튼을 제공하는 것입니다.

당신은 당신의 ViewController navigationItem.backBarButtonItem은 기본적으로 당신은 여전히뿐만 아니라 버튼을 기본을 다시 얻을 설정하지 않은 경우에도 것을 제외하고, 좋은 접근이 구현했습니다. 그래서 그 버튼은 아마 당신의 커스텀 뒤로 버튼 위에 나타날 것입니다.

ViewController B의 navigationItem.hidesBackButton = YES을 설정하면 문제가 발생하지 않습니다.

그리고 나중에 사용자 지정 뒤로 단추를 구현할 때는 navigationItem.leftBarButtonItem 대신 navigationItem.backBarButtonItem을 설정해야합니다. 이 방법을 사용하면 ViewController AnavigationItem을 사용하여 ViewController B이 위에있을 때 나타나는 뒤로 단추를 변경할 수 있습니다.

+0

고마워, 나는 문제를 해결했다. 당신이 말한 모든 것에 맞습니다. 정말 도움이되었지만 UIBarButton이 나타나지 않도록 막았습니다. 실제로 하위 클래스에서 추가 한 UIImageView는 viewWillAppear을 사용하여 호출 할 때 버튼을 숨기고있었습니다. 그래서 두 가지 문제가 해결되었습니다. 다시 고맙습니다. – Trivane

+0

이 방법의 문제점은 뒤로 단추를 사용자 지정보기로 설정할 수 없다는 것입니다. 당신이 할 수있는 최선은 배경 이미지를 변경하는 것입니다. 버튼이 어떻게 보이는지 더 자세히 제어하고 싶다면 OP가 완료되면 ViewController B에 leftBarButtonItem을 설정해야합니다. – d512

+0

나를 위해 일한 것은'B.navigationItem.hidesBackButton = YES'와'B.navigationItem.leftBarButtonItem = '입니다. – aroth

3
UIBarButtonItem *backButton = [UIBarButtonItem new]; 

[backButton setTitle:@"Back"]; 

[[self navigationItem] setBackBarButtonItem:backButton]; 

이 코드는 이전보기 컨트롤러에서 언급해야합니다. 다음 기본보기 단추 만 다음보기 컨트롤러에 있습니다.

즐기십시오!

관련 문제