2012-02-26 6 views
1

루트 ViewController 및 자세한 ViewController가 있습니다. 내가 detailedViewController에 push 할 때, rootButton으로부터 title과 함께 leftBarButtonItem을 얻는다. 하지만 제목이 "뒤로"일뿐입니다. 그렇게하는 법?집합 제목을 leftBarButtonItem으로 설정하는 방법

self.navigationItem.leftBarButtonItem.title = @"Back"; 

내 타입 barButtonItem에 (왼쪽 화살표 예 104)를 만들려면 도움이되지 않고 leftBarButtonItem 끔찍한 결정되는 설정할 수 있습니다.

푸시하기 전에 rootViewController의 제목을 수동으로 변경하는 것보다 다른 방법이 있습니까? 애플의 문서에서

+0

이미 거기에이 문제에 관한 많은 질문이 있습니다 (다시 이미지 및 사용자 지정 텍스트를 화살표). http://stackoverflow.com/questions/2197698/how-to-set-the-text-of-a-back-button-on-a-uinavigationbar와 같이 거기에서 더 많은 것을 따라야합니다. –

+0

아하, 실종 된 것을 미안하다 – Buron

+0

@ 부롱 끔찍한 결정으로 무엇을 의미합니까? –

답변

6

: 백 버튼이 탐색 모음에서 필요할 때

backBarButtonItem

막대 버튼 항목을 사용합니다.

@property (비 원자, 유지) UIBarButtonItem * backBarButtonItem 토론이 네비게이션 아이템 즉시 스택의 상위 항목 아래

는 내비게이션 제어기는이 탐색에서 탐색 바 백 버튼을 도출 목. 이 속성이 nil 인 경우 탐색 항목은 title 속성의 값을 사용하여 적절한 뒤로 버튼을 만듭니다. 사용자 지정 이미지를 지정하거나 뒤로 단추에 제목을 지정하려는 경우 사용자 지정 제목이나 이미지와 함께 사용자 지정 바 단추 항목 을 대신이 속성에 할당 할 수 있습니다. 바 버튼 항목을 구성 할 때 사용자 정의보기를 지정하지 마십시오. 탐색 모음 항목은 뒤로 막대 단추 의 사용자 지정보기를 무시합니다.

따라서 barButtonItem (예 : – initWithTitle:style:target:action:)을 만들고 해당 속성에 할당 할 수 있습니다. 또한

, 사용자 정의 이미지를 갖고 싶어하는 경우 다음과 같은 범주 확장 만들 UIBarButtonItem (왼쪽 또는 오른쪽) 나는 당신을 제안을 위해 :

//UIBarButtonItem+Extension.h  
+ (UIBarButtonItem*)barItemWithImage:(UIImage*)image title:(NSString*)title target:(id)target action:(SEL)action; 

//UIBarButtonItem+Extension.m  
+ (UIBarButtonItem*)barItemWithImage:(UIImage*)image title:(NSString*)title target:(id)target action:(SEL)action 
{ 
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
    button.frame = CGRectMake(0.0, 0.0, image.size.width, image.size.height); 
    button.titleLabel.textAlignment = UITextAlignmentCenter; 

    [button setBackgroundImage:image forState:UIControlStateNormal]; 
    [button setTitle:title forState:UIControlStateNormal]; 
    [button addTarget:target action:action forControlEvents:UIControlEventTouchUpInside]; 

    UIBarButtonItem* barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button]; 

    return [barButtonItem autorelease];  
} 

을 다음

UIBarButtonItem* backBarButtonItem = [UIBarButtonItem barItemWithImage:[UIImage imageNamed:@"YoutImageName"] title:@"YourTitle" target:self action:@selector(doSomething:)]; 
로 사용
1
UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc] init]; 
backButtonItem.title = NSLocalizedString(@"Back", nil); 
self.navigationItem.backBarButtonItem = backButtonItem; 
+0

UINavigationItem의 backBarButtonItem 속성은 UIBarButtonItem 형식이며 NSString 형식이 아닙니다. 이렇게하면 충돌이 발생할 가능성이 큽니다. – Tom

+1

맞습니다. 죄송합니다. 코드에서 복사 할 때 실수를했습니다. – Franck

5

나는 오늘이 모든 주름을 마침내 알아 냈습니다. 그리고 그것은 위에서 간단합니다.

어린이의 뒤로 버튼 텍스트는 부모에 설정된 값을 기반으로합니다. 이것은 생각할 때 명백한 동작입니다. 두 개의 부모로부터 뷰 컨트롤러에 도달 할 수있는 경우, 뒤로 버튼의 텍스트는 푸시 된 텍스트에 따라 달라야합니다.

텍스트가 항상 같은 경우

:

  1. 편집기에서 부모 뷰 컨트롤러의 탐색 항목을 선택합니다.
  2. 텍스트를 뒤로 버튼 값에 입력하십시오.

그러면 끝났습니다. 이 뷰 컨트롤러가 새로운 뷰 컨트롤러에 의해 옆으로 밀리면, 새로운 뷰 컨트롤러는이 텍스트를 제목으로 가져옵니다.

텍스트가 동적 인 경우

:

  1. 편집기에서 부모 뷰 컨트롤러의 탐색 항목을 선택합니다.
  2. 일부 텍스트를 뒤로 버튼 값에 넣으십시오. 다시 작업을 완료, self.navigationItem.backBarButtonItem.title = dynamicText;

을 그리고 : 그것은 부모 뷰 컨트롤러에서 변경해야 할 때

  • 제목을 설정합니다.

    분명히하려면 부모보기 컨트롤러에서 언제든지 설정할 수 있습니다. 다른보기 제어기를 누르면 표시됩니다.

    당신이 디자이너의 돌아 가기 버튼의 텍스트를 넣어하지 않는 경우, 뷰 컨트롤러의 인스턴스의 프로세스가 self.navigationItem.backBarButtonItem을 생성하지 않으며, 당신이 nil 개체의 제목을 설정할 수 없습니다. 나는 이것이 주변의 모든 혼란이 어디에서 유래했는지 믿습니다.

    물론 이것을 런타임에 만들 수도 있지만, 이미 스토리 보드/펜촉에서 대부분의 작업을하고 있다면 디코더에서 쉽게 처리 할 수 ​​있습니다.

    더 궁금하신 분은 주제에 대한 블로그 글을 작성하셨습니다. 약간 more details이 있습니다.

  • 0

    그것은 나를 위해 작동 :

    [self.navigationItem.leftBarButtonItem setTitle:@"Back"];

    관련 문제