2014-03-31 2 views
2

비슷한 질문을 한 번 읽은 후에 사용자 지정 뒤로 버튼보기를 사용하려면 탐색 컨트롤러의 탐색 모음의 탐색 항목의 왼쪽 단추 항목을 사용자 지정 항목으로 설정해야합니다. 보기,하지만 내가 뭘하든 상관없이 나는 기본값으로 고착되고있다. 나는 다시 탐색하려는 뷰 컨트롤러 내에서뿐만 아니라 다시 탐색 할 뷰 컨트롤러 내에서이 설정을 시도했지만 아무 소용이 없습니다. 내가 뭘 잘못했을지 모르겠다.uinavigationitem의 뒤로 버튼이 작동하지 않음

- (void)loadView{ 
    [super loadView]; 
    UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc]initWithCustomView:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"back-btn"]]]; 
    self.navigationController.navigationItem.leftBarButtonItem = backButtonItem; 
    self.navigationController.navigationItem.leftBarButtonItem.tintColor = [UIColor whiteColor]; 
    [self.navigationController setNavigationBarHidden:YES animated:YES]; 
} 
+0

어떤 수퍼 뷰에 navigationController를 추가하지 않았습니다. – HCarrasko

+0

답장을 보내 주셔서 감사합니다. 탐색 컨트롤러는 다른보기 컨트롤러에서 모달로 표시됩니다. – jefflovejapan

+0

'viewWill/DidAppear'에서도 똑같이 해보십시오. – sage444

답변

3

잘못된 일을하는 중요한 사항은보기 컨트롤러 대신 탐색 컨트롤러에서 막대 단추 항목을 사용하는 것입니다. 애플의 View Controller Catalog for iOS 인용하면 네비게이션 인터페이스에서

를 탐색 스택의 각 내용 뷰 컨트롤러는 navigationItem 속성의 값으로 탐색 항목을 제공합니다.

강조 광산; 콘텐츠보기 컨트롤러는 사용자 지정보기 컨트롤러입니다. 당신은 사용자 정의 버튼이 있어야 모든 뷰 컨트롤러에서이 작업을 수행 할 필요가 그래서 UIViewController를 서브 클래스 다시 사용자 정의 버튼을 구현하는 자신의 기본 뷰 컨트롤러 클래스를 만드는 것이 좋습니다

self.navigationItem.leftBarButtonItem = backButtonItem; 

을,이 기지를 사용이 시도 보기 컨트롤러를 다른보기 컨트롤러의 부모로 사용하십시오.

내비게이션 막대를 숨기고 있습니다. 사용자 지정 뒤로 버튼을 표시하려면 좋지 않을 수 있습니다.

표준 뒤로 버튼을 바꾸면 탭 동작이 사라집니다. UIImageView 대신 막대 단추 항목의 사용자 지정보기에서 UIButton을 사용하십시오.

또한이 설정 코드를 loadView이 아닌 viewDidLoad에 두는 것이 더 일반적입니다.

그래서 나는 같은 것을 할 것입니다 :

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [backButton setBackgroundImage:[UIImage imageNamed:@"back-btn"] forState:UIControlStateNormal]; 
    [backButton sizeToFit]; 
    [backButton addTarget:self action:@selector(popNavigationController:) forControlEvents:UIControlEventTouchUpInside]; 

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

- (void)popNavigationController:(id)sender 
{ 
    [[self navigationController] popViewControllerAnimated:YES]; 
} 

주 당신이 버튼을 사용자 정의를 다시 사용하는 경우, 스 와이프에서 - 더 - 끝 - 중 - 화면 간 이동 백 제스처 작동 안 할 것이다. 몇 가지 잠재적 인 솔루션에 대해서는 this Stack Overflow question을 참조하십시오.

+0

굉장히 도움을 청합니다. 설치 코드를 호출해야하는 이유 (예 : viewdidload, viewwillappear 등)에 도움이되는 유용한 치트 시트를 알고 계십니까? – jefflovejapan

+0

치트 시트에 대해 모르겠습니다. 'loadView'는 메인 뷰를 생성하여 뷰 컨트롤러의'view' 속성에 설정해야하며 일반적으로 오버라이드되지 않고'super'를 호출하지 않습니다 (뷰는 한 번만 생성 될 수 있기 때문에). 'viewDidLoad'는 뷰가로드 될 때 한 번 발생해야하는 다른 설정을 수행하며'super'를 호출해야합니다. –

+0

완벽합니다. 다시 한번 감사드립니다. – jefflovejapan

관련 문제