문제

a의 "뒤로 버튼" UINavigationController 기본적으로 스택에서 마지막보기의 제목을 보여줍니다. 대신 뒤로 버튼에 사용자 정의 텍스트를 사용하는 방법이 있습니까?

도움이 되었습니까?

해결책

에서 이 링크:

self.navigationItem.backBarButtonItem =
   [[UIBarButtonItem alloc] initWithTitle:@"Custom Title"
            style:UIBarButtonItemStylePlain
           target:nil
           action:nil];

타일러가 의견에서 말했듯이 :

Visible View 컨트롤러에서는이 작업을 수행하지 않지만 뷰 컨트롤러에서 뒤로 버튼을 누르도록 볼 수 있습니다.

다른 팁

인터페이스 빌더에서 텍스트를 설정할 수 있습니다.

뒤로 버튼이 반환되는 ViewController의 탐색 항목을 선택하십시오.

enter image description here

유틸리티 패널 속성 검사관에서 뒤로 버튼에 대한 레이블을 입력하십시오.

enter image description here

허용 된 답변에서와 같이 제목을 코드로 설정하는 것 보다이 접근법을 선호합니다.

또한 View Controller에서 스택을 한 수준으로 한 레벨에서이를 수행해야합니다. 다시 말해, 가시 뷰 컨트롤러에서는이 작업을 수행하지 말고 뷰 컨트롤러에서 뒤로 버튼을 누르면 볼 수 있습니다.
--tyler

나는 이것을 사용한다 :

// In the current view controller, not the one that is one level up in the stack
- (void)viewDidLoad {
    [super viewDidLoad];
    self.navigationController.navigationBar.backItem.title = @"Custom text";
}

다른 컨트롤러를 스택에 밀어 넣기 전에 컨트롤러의 제목을 간단히 설정하여 이에 대한 편리한 솔루션을 찾았습니다.

self.navigationItem.title = @"Replacement Title";
[self.navigationController pushViewController:newCtrl animated:YES];

그런 다음 원본 제목을 viewWillAppear, 이와 같이:

-(void)viewWillAppear:(BOOL)animated
{
  ...
  self.navigationItem.title = @"Original Title";
  ...
}

기본 동작이기 때문에 작동합니다 UINavigationController 푸시 작업 중에 뒤로 버튼을 구성 할 때는 이전 컨트롤러의 제목을 사용해야합니다.

뒤로 버튼의 제목은 이전 뷰의 제목으로 기본값을 기본으로 사용하므로 사용하는 빠른 요령은 이전보기의 .m 파일에 다음 코드를 배치하는 것입니다.

-(void)viewWillAppear:(BOOL)animated {

    // Set title
    self.navigationItem.title=@"Original Title";
}

-(void)viewWillDisappear:(BOOL)animated {

    // Set title
    self.navigationItem.title=@"Back";
}

init 메소드에서 다음 코드를 추가하십시오.

- (id)initWithStyle:(UITableViewStyle)style {
    if(self = [super init]) {

        //...

        UIBarButtonItem *customBackButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" 
                                             style:UIBarButtonItemStylePlain 
                                            target:self 
                                            action:@selector(goBack)];
        self.navigationItem.leftBarButtonItem = customBackButton;
        [customBackButton release];

        //...
    }
    return self;
}

그런 다음 간단한 방법을 추가하여 ViewController를 해제 할 수 있습니다.

-(void)goBack {
    [self.navigationController popViewControllerAnimated:YES];  
}

ViewDidload 또는 LoadView에 다음 코드를 추가하십시오

self.navigationController.navigationBar.topItem.title = @"Custom text";

iOS 9와 함께 iPhone과 iPad에서 테스트했습니다.

Rein의 답변에 추가. 선언 된 Apple의 문서에서 주목하십시오 backbarbuttonitem 이것은 :

@property(nonatomic, retain) UIBarButtonItem *backBarButtonItem

따라서 합성 된 세터가 retain 전달한 인스턴스는 명시 적으로 출시되지 않습니다. 사용하여 이것을 해결할 수 있습니다 autorelease

 self.navigationItem.backBarButtonItem = 
      [[[UIBarButtonItem alloc] initWithTitle:@"Custom Title" 
         style:UIBarButtonItemStyleBordered
         target:nil
         action:nil] autorelease];  //<-- autoreleased

또는 인스턴스에서 변수를 가리키하여 나중에 명시 적으로 릴리스 할 수 있습니다.

UIBarButtonItem* item = ...
self.navigationItem.backBarButtonItem = item;
[item release];

도움이 되었기를 바랍니다!

- (void)viewDidLoad {
  [super viewDidLoad];

  UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
  self.navigationItem.backBarButtonItem = backButton;
  [backButton release];
}

나는 흥미로운 것을 발견했다. 서브 클래스가있는 경우 UINavigationController 그리고 pushViewController:animated: 방법과 다음과 같은 일을하십시오 : (내가 아크를 사용하고 있음을 명심하십시오)

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] 
 initWithTitle: @"Back" 
 style: UIBarButtonItemStyleBordered
 target: nil action: nil];

viewController.navigationItem.backBarButtonItem = backButton;

[super pushViewController:viewController animated:animated];

그렇다면 모두를 위해 ViewControllers 내비게이션 컨트롤러와 함께 푸시면 "뒤로"버튼이 자동으로 있습니다. 특정 뷰 컨트롤러의 텍스트를 변경하려면 ViewController를 특정 클래스 또는 자신의 사용자 정의 프로토콜 (ViewController가 상속받을 수있는 메소드를 상속받을 수 있습니다. backButtonText 또는 바보 같은 것) Sothat에 나오는 ViewController에 대한 특정 정보를 제공 할 수있는 Back 버튼 텍스트를 사용자 정의 할 수 있습니다. 이제 뒤로 버튼 텍스트는 책임을 지키는 장소에서 처리됩니다. 나는 텍스트를 변경하기 위해 새 버튼을 만드는 것이 짜증나는 것을 인정해야하지만, 아, 잘 아니다.

누구든지 왜 이렇게하지 않는 이유를 생각할 수 있습니까? Atlest는 ViewController 타이틀로 바이올린을 바이올링 할 필요가 없거나 탐색 컨트롤러에서 ViewController를 푸시하기 전에 새 백 버튼을 만들어야합니다.

Rein의 답변은 잘 작동합니다.

둘 이상의 뷰 컨트롤러를 푸시하면 변경된 뒤로 버튼 제목이 각각에 대해 나타나며 원하는 것이 아닐 수도 있습니다.

이 경우 뷰 컨트롤러를 푸시 할 때마다 사용자 정의 Uibarbuttonitem을 만들어야합니다.

또한, 당신이 그것을하십시오 ~ 전에 보기 컨트롤러를 밀면 제목이 변경 될 때 화면 딸꾹질이 나타납니다.

Aubrey의 제안을 확장하면 Child View 컨트롤러에서이를 수행 할 수 있습니다.

부모의 NavigationItem.title 및 Parent 's NavigationItem의 기존 값을 저장하기위한 두 가지 변수를 만듭니다.

UINavigationItem* oldItem;
NSString* oldTitle;

안에 viewDidLoad, 다음을 추가하십시오.

oldItem = self.navigationController.navigationBar.topItem;  
oldTitle = oldItem.title;  
[oldItem setTitle: @"Back"];  

안에 viewWillDisappear, 다음을 추가하십시오.

[oldItem setTitle: oldTitle];  
oldTitle = nil;  // do this if you have retained oldTitle
oldItem = nil;   // do this if you have retained oldItem

완벽하지 않습니다. 새 컨트롤러가 애니메이션으로 표시 될 때 부모보기의 제목이 표시됩니다. 그러나 이것은 뒤로 버튼을 사용자 정의하고 표준 뒤로 버튼 모양으로 유지하는 목표를 달성합니다.

이것을 당신에게 넣으십시오 viewDidLoad, 그것이 당신이 찾고있는 것을 초래하기를 바랍니다.

UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Close" 
style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = backBarButtonItem;
[backBarButtonItem release];

Swift 3에서 도착 컨트롤러 (때로는 더 많은 논리)에서 제목을 설정하려면 :

func setBackButtonNavBar(title: String, delay: Double){

    let when = DispatchTime.now() + delay
    DispatchQueue.main.asyncAfter(deadline: when, execute: { () -> Void in

        if let navBar = self.navigationController?.navigationBar{
            navBar.backItem?.title = title
        }
    })

}

다가오는 컨트롤러에서 :

override func viewDidLoad() {
    super.viewDidLoad()
    self.setBackButtonNavBar(title: "back", delay: 0.3)
}

보통 나는 self.setbackbuttonnavbar를 컨트롤러 확장에 넣습니다.

나는 이것이 오래된 질문이라는 것을 알고 있습니다. 그리고 답변의 종류가 업데이트되었습니다!

쉬운 방법은 Parent ViewController에서 이것을하는 것입니다.

즉, 다음보기 컨트롤러로 데려가는 것입니다.

self.navigationItem.backBarButtonItem  = UIBarButtonItem(title: "Custom text here", style: .plain, target: nil, action: nil)

코드 에서이 작업을 수행하여의 뒤로 버튼 스타일을 제거합니다. UINavigationConroller. 각 뷰에서 내비게이션 항목을 추가하면 Back Botton의 제목을 StoryBoard.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top