탐색 표시 줄에서 "뒤로"버튼의 제목을 변경하는 방법


224

현재 왼쪽 막대 버튼 기본값은 현재 뷰를로드 한 뷰의 제목입니다. 즉, 버튼을 눌렀을 때 표시되는 뷰 (뒤로 버튼)입니다.

버튼에 표시된 텍스트를 다른 것으로 변경하고 싶습니다.

뷰 컨트롤러의 viewDidLoad 메서드에 다음 코드 줄을 넣어 보았지만 작동하지 않는 것 같습니다.

self.navigationItem.leftBarButtonItem.title = @"Log Out";

어떻게해야합니까?

감사.

답변:


345

"NewTitle"이라는 제목의 ViewController를 호출하는 메소드에 배치해야합니다. push 또는 popViewController 문 바로 앞에 있습니다.

UIBarButtonItem *newBackButton = 
        [[UIBarButtonItem alloc] initWithTitle:@"NewTitle" 
                                         style:UIBarButtonItemStyleBordered 
                                        target:nil 
                                        action:nil];
[[self navigationItem] setBackBarButtonItem:newBackButton];
[newBackButton release];

47
자식 뷰 컨트롤러에있을 때 자식 뷰 컨트롤러에서이를 호출하면 작동하지 않습니다. 자식 뷰 컨트롤러 내에있는 동안 부모 뷰 컨트롤러에서이를 호출해야합니다.
Alex Reynolds

2
세 번째 레벨 뷰 컨트롤러 (두 번째 푸시)의 뒤로 버튼을 변경하려면 위의 답변 대신 다음 줄을 사용해야했습니다. [[self.parentViewController navigationItem] setBackBarButtonItem : newBackButton]; 내가 뭔가 잘못하고 있습니까?
JonB

4
조단은 "코드를 어디에 두어야하는지 좀 더 명확하게 덧붙였다"고 말했다. 더 명확합니다. 두 번째 (자식) 컨트롤러를 푸시하기위한 호출 직전에 첫 번째 (부모) 컨트롤러에 넣습니다.
benvolioT

1
당신은 사용자 정의 BaseViewController를 만들어 그것을 넣을 수 있습니다-viewDidLoad:
ArtFeel

2
푸시 또는 팝 바로 전에이 작업을 수행 할 필요는 없습니다. viewDidLoad 또는 loadView 또는 다른 곳에서이보기의 제목 및 기타 속성을 설정할 수 있습니다. 아래의 Victor Bogdan의 답변이 더 명확합니다. IMHO.
Joe Strout

98

ChildVC에서 이것은 나를 위해 일했습니다 ...

self.navigationController.navigationBar.topItem.title = @"Back";

스위프트에서도 작동합니다!

self.navigationController!.navigationBar.topItem!.title = "Back"

4
Xcode 5.0.2의 iOS 7에서 테스트 및 검증되었습니다. 다시 돌아 가면 이전 화면의 제목이 뒤로로 바뀝니다.
Alex Zavatone

가장 간단한 솔루션. iOS 6 및 7 모두에서 작동합니다. 기본 UIViewController를 넣고 완료하십시오. 추진 vc의 IB 솔루션 또는 설정보다 훨씬 낫습니다.
Eric Chen

46
이전보기 컨트롤러의 제목을 변경하면이 솔루션의 문제점
Nikita

2
@Nikita, 당신은 viewWillDisappear에서 타일 다시 설정할 수 있습니다
단 보리

81

backBarButtonItem에 대한 문서는 다음과 같습니다 .

"이 탐색 항목이 스택의 맨 위 항목 바로 아래에 있으면 탐색 제어기는이 탐색 항목에서 탐색 모음의 뒤로 단추를 파생합니다. [...] 뒤로 단추의 사용자 정의 이미지 또는 제목을 지정하려는 경우 대신이 속성에 맞춤 바 버튼 항목 (맞춤 제목 또는 이미지 포함)을 할당 할 수 있습니다. "

View Controller A ( "부모" 보기 컨트롤러) :

self.title = @"Really Long Title";
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Short" style:UIBarButtonItemStyleBordered target:nil action:nil];
self.navigationItem.backBarButtonItem = backButton;

다른 뷰 컨트롤러 B 가 탐색 스택의 맨 위에 있고 A 가 바로 아래에 있으면 B 의 뒤로 버튼에 "Short" 라는 제목이 있습니다 .


4
까다로운 부분은 자식보기가 아닌 부모보기 컨트롤러에서 뒤로 버튼을 설정해야한다는 것입니다. 한 시간을 낭비하고 방금 알아 냈습니다.
Merkurial

56

스토리 보드를 사용하는 Xcode 4.5에서 Back 버튼의 값이 동적으로 변경 될 필요가 없을 때 발견 한 가장 쉬운 해결책은 View Controller의 탐색 항목과 관련된 "Back Button"필드를 사용하는 것입니다. "뒤로"버튼으로 다른 것을 말하고 싶습니다.

예를 들어 아래 스크린 샷에서 푸시하는 뷰 컨트롤러의 뒤로 버튼을 누르면 뒤로 버튼의 제목으로 "뒤로"가 표시됩니다.

여기에 이미지 설명을 입력하십시오

물론, 매번 약간 다른 것을 말하기 위해 뒤로 버튼이 필요한 경우에는 작동하지 않습니다 ... 여기에 다른 솔루션이 모두 있습니다.


원래 질문은 스토리 보드 사용에 대해 아무 말도하지 않았으므로 이것이 받아 들일 만한 대답 이 아니라는 것이 좋지만 스토리 보드 기반 개발을위한 솔루션을 수정하십시오.
빌라 포수

42

나는 그 질문이 매우 오래되었다는 것을 알고 있지만 좋은 해결책을 찾았습니다.

UIBarButtonItem *barButton = [[UIBarButtonItem alloc] init];
barButton.title = @"Custom Title";
self.navigationController.navigationBar.topItem.backBarButtonItem = barButton;

childView에서 작동합니다! iOS 7에서 테스트되었습니다.


이것은 한 수준으로 만 작동하는 것 같습니다. 그것은 나를 위해 아이의 아이를 위해 작동하지 않습니다. iOS 8.
narco

26

어쩌면 나는 단순 해 보이지만 Apple의 문서에서 문구는 다음과 같습니다.

뷰 컨트롤러 중 하나 에서 사용자 지정 막대 버튼 항목을 지정하지 않으면 기본 뒤로 버튼 이 사용되고 제목은 이전 뷰 컨트롤러의 title 속성 값 즉, 한 수준 아래로 뷰 컨트롤러로 설정됩니다. 스택.

위의 올바른 것으로 표시된 솔루션은 상위 컨트롤러의 기본 버튼 항목을 설정합니다. 정답이지만 self.title새 컨트롤러를 NavigationController 스택으로 푸시하기 전에 UIViewController의 속성을 변경하여 문제를 해결하고 있습니다.

이렇게하면 다음 컨트롤러에서 뒤로 버튼의 제목이 자동으로 업데이트되며, 설정을 self.title다시 설정하면 viewWillAppear이 방법으로 너무 많은 문제를 일으킬 수 없습니다.


19

이것은 나를 위해 더 잘 작동합니다. 시도 :

 self.navigationController.navigationBar.topItem.backBarButtonItem = [[UIBarButtonItem alloc] 
initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];

19

Swift / iOS8에서 다음이 저에게 효과적이었습니다.

let backButton = UIBarButtonItem(
      title: "Back Button Text",
      style: UIBarButtonItemStyle.Bordered,
      target: nil,
      action: nil
);

self.navigationController.navigationBar.topItem.backBarButtonItem = backButton;

Felipe의 답변에서 나온 것입니다.


신속한 1.1 구문은self.navigationController?.navigationBar.topItem?.backBarButtonItem
워렌 버튼

3
스타일은 UIBarButtonItemStyle.Plain이어야합니다
Micro

2
고마워 이것이 참으로 한심한 API입니다. UIKit을 대표합니다. iOS의 탐색 표시 줄과 상태 표시 줄 사이 에서이 플랫폼을 위해 개발 한 것은 놀라운 일입니다. Stack Overflow와 그 기여자들에게 아기 예수를 감사하십시오!
Womble

@Wobmle : 몇 달 동안 Android 용으로 개발해야합니다.)
fl034

17

자, 여기 방법이 있습니다. 뷰 컨트롤러가 "첫 번째"이고 버튼 등을 눌러 다른 뷰 컨트롤러를 "두 번째"탐색하는 경우 몇 가지 작업을 수행해야합니다. 먼저 다음과 같이 "두 번째"보기 컨트롤러의 ViewDidLoad 메서드에서 BarButtonItem을 만들어야합니다.

    UIBarButtonItem *btnBack = [[UIBarButtonItem alloc]
                                   initWithTitle:@"Back" 
                                   style:UIBarButtonItemStyleBordered
                                   target:self
                                   action:@selector(OnClick_btnBack:)];
    self.navigationItem.leftBarButtonItem = btnBack;
    [btnBack release];

그렇게 한 후에는 같은 .m 파일에서 "btnBack"작업을위한 코드를 작성해야합니다.

-(IBAction)OnClick_btnBack:(id)sender  {
      [self.navigationController popViewControllerAnimated:YES];
    //[self.navigationController pushViewController:self.navigationController.parentViewController animated:YES];
}

그게 다야.


2
응용 프로그램 디자인에서 중요한 경우 A leftBarButtonItem의 모양은 없습니다 backBarButtonItem.
Alex Reynolds

1
Alex가 위에서 언급했듯이 왼쪽 막대 버튼은 백 바 항목처럼 보이지 않지만 게시 된 솔루션 중 매우 감사합니다. 백바 항목처럼 보이게하려면 어떻게해야합니까 ???
Dale

17

제목이 정말 긴 부모 뷰 컨트롤러가있었습니다. 이로 인해 뒤로보기 텍스트가 하위 뷰 컨트롤러의 제목으로 번져 나옵니다.

여러 가지 솔루션을 시도한 후에 이것이 내가 한 일입니다 (@ john.k.doe 접근 방식으로 확장).

Xcode 7.2, Swift 2 사용

  1. 스토리 보드 Navigation Item에서 Parent View Controller 장면 (자식 VC 아님) 에 a 를 추가합니다

탐색 항목

  1. Attributes Inspector새의 Navigation Item, A의 입력 space의 문자 Back Button필드. 이것에 대해서는 나중에 더 설명하겠습니다.

계층 구조보기의 탐색 항목

뒤로 단추 필드에 공백 문자를 추가하십시오

  1. 에서 부모 뷰 컨트롤러, 다음 코드를 추가합니다 :

단편:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    switch segue.destinationViewController {
    case is ChildViewController:
        navigationItem.backBarButtonItem?.title = ""
    default:
        navigationItem.backBarButtonItem?.title = "Full Parent Title"
    }
}

설명:

뒤로 버튼 종류는 상위 뷰 컨트롤러에 속합니다. 는 Navigation Item당신이 코드 또는 스토리 보드에서 제목을 설정할 수 있도록, 당신에게 뒤로 가기 버튼에 대한 핸들을 제공합니다.

노트 :

Navigation Item Back Button텍스트를 기본 빈 문자열로 두면 뒤로 단추 제목이 "뒤로"가됩니다.

다른 접근 방식이 작동하는 이유는 무엇입니까? :

자식 뷰 컨트롤러에서 뒤로 단추 제목을 재정의 할 수는 있지만 이미 화면에서 잠깐 동안 깜박일 때까지 핸들을 가져 오는 것이 어려웠습니다.

일부 접근법은 새로운 뒤로 버튼을 구성하고 기존 버튼을 무시합니다. 나는 그것이 작동하고 일부 사용 사례에서 필요할 것이라고 확신합니다. 그러나 가능한 경우 기존 API를 활용하는 것을 선호합니다.

title일부 상황에서는 상위 뷰 컨트롤러를 변경하는 것이 가장 빠른 솔루션입니다. 그러나 이렇게하면 부모 제목이 변경되므로 상태를 관리해야합니다. Tab Bar Controller제목 변경 으로 인해 제목에 부작용이 발생하기 때문에 문제가 발생하기 Tab Bar Item쉽습니다.


10

스토리 보드를 사용하는 사용자는 부모 (대상보기를 보유하고있는 것이 아닌)보기 컨트롤러 프레임을 선택하십시오 (탐색 모음에서 마우스 오른쪽 버튼을 클릭 한 다음 속성 관리자를여십시오. 여기서 세 가지 양식 입력을 찾을 수 있습니다. " 뒤로 버튼 "은 우리가 찾고있는 것입니다.


4
현지화에 관심이없는 경우이 방법이 가장 좋습니다.
MiQUEL

7

스위프트 버전 :

자녀의 ViewController에서 :

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    self.navigationController?.navigationBar.backItem?.title = "TEXT"
}

실제로 스택의 이전 뷰 컨트롤러 제목이 "TEXT"로 변경됩니다.
gravitron

6

다른 방법이 있습니다.

부모보기 컨트롤러에서 다음 방법을 구현하십시오.

- (void) setBackBarButtonItemTitle:(NSString *)newTitle {
  self.navigationItem.backBarButtonItem.title = newTitle;
}

자식보기 컨트롤러에서 제목을 변경하려는 경우 다음과 같이 작동합니다.

NSArray *viewControllerArray = [self.navigationController viewControllers];
int parentViewControllerIndex = [viewControllerArray count] - 2;
[[viewControllerArray objectAtIndex:parentViewControllerIndex] setBackBarButtonItemTitle:@"New Title"];

나는 parentViewController재산을 작동 시킬 수 없었 습니다.

[(ParentViewController *)(self.navigationController.parentViewController) setBackBarButtonItemTitle:@"New Title"];

버그인지 또는 제대로 사용하고 있지 않은지 모르겠습니다. 그러나 viewControllers배열 에서 두 번째-마지막 뷰 컨트롤러를 잡으면 부모 뷰 컨트롤러를 가리키고 해당 참조를 사용하여 부모 메서드를 올바르게 호출 할 수 있습니다.


6

확인. 나는 개인적으로 이러한 모든 옵션을 미워했습니다. 그러므로 나는 내 자신을 생각해 냈습니다.

내가 본 정보를 기반으로합니다. 이전 뷰 컨트롤러는 푸시 된 뷰 컨트롤러에 표시되는 자체 "뒤로"버튼을 제어하는 ​​것으로 보입니다.

변경된 뒤로 버튼을 원하는 컨트롤러의 navigationItem에 대해 Lazy Load 메서드를 만들었습니다.

광산은 초대 구매자 컨트롤러입니다

구매자 초대는 기본적으로 설정된 텍스트입니다.

하지만 뒤로 버튼은 초대해야했습니다

뒤로 버튼을 만드는 데 사용한 코드는 다음과 같습니다.

이 코드를 Controller의 Implementatio (.m) 파일 맨 위에 배치하고 수퍼의 방법을 자동으로 무시합니다.

- (UINavigationItem *)navigationItem{
    UINavigationItem *item = [super navigationItem];
    if (item != nil && item.backBarButtonItem == nil)
    {
        item.backBarButtonItem = [[[UIBarButtonItem alloc] init] autorelease];
        item.backBarButtonItem.title = @"Invite";
    }

    return item;
}

나는 이것이 이것을 달성하는 훨씬 더 우아한 방법이라고 생각합니다.

이 코드를 한 곳에 배치하면 필요할 때 자동으로 채워집니다.

각 푸시 요청 전에 코드를 호출 할 필요가 없습니다.

도움이 되었기를 바랍니다


5
UIBarButtonItem *btnBack = [[UIBarButtonItem alloc]
                                   initWithTitle:@"Back" 
                                   style:UIBarButtonItemStyleBordered
                                   target:self
                                   action:@selector(OnClick_btnBack:)];
    self.navigationItem.leftBarButtonItem = btnBack;
    [btnBack release];

5

답은 다음과 같습니다.

에서 viewDidAppear:animated(not in viewDidLoad) 다음을 수행하십시오.

- (void)viewDidAppear:(BOOL)animated
{
     [self.navigationController.navigationBar.backItem setTitle:@"anything"];

     // then call the super
     [super viewDidAppear:animated];
}

뒤로 버튼의 모양을 유지하려면


제목이 바뀌는 것을 제외하고는 나쁘지 않습니다. viewWillAppear에서 시도했지만 작동하지 않습니다.
트래비스 M.

5

여기에 설명 된 해결책 중 어느 것도 나를 위해 일하지 않았습니다. 그래서 내가 한 것은 다음과 같은 방식으로 내가 온 장면에서 제목을 제거하는 것입니다.

self.title = @"";

따라서 새로운 장면이 표시되면 배경 텍스트가 나타나지 않습니다.

나는 이것이 절대적인 해결책이 아니라는 점에 동의하지만, 효과가 있었고 설명 된 것도 나를 위해 일하지 않았다.


남자, 나는 당신에게 2017 년이라고 말해야합니다. 뒤로 버튼을 처리하는 것은 여전히 ​​$ $의 고통입니다. 귀하의 방법은 저에게 효과적이며 "취소"라는 단어를 원했지만 "<"기호로 끝났습니다. 그러나 나는 내가 얻은 것에 정착 할 것입니다. :)
AnBisw 2011

5

다음보기 컨트롤러로 푸시하기 전에 탐색 스택에서 현재보기 컨트롤러의 제목을 뒤로 버튼의 원하는 텍스트로 변경하는 것이 가장 좋습니다.

예를 들어

self.navigationItem.title = @"Desired back button text";
[self.navigationController pushViewController:QAVC animated:NO];

그런 다음 viewDidAppear에서 제목을 원래 VC의 원하는 제목으로 다시 설정하십시오. 짜잔!


5

스위프트

    // Rename back button
    let backButton = UIBarButtonItem(
        title: "Back",
        style: UIBarButtonItemStyle.Plain, // Note: .Bordered is deprecated
        target: nil,
        action: nil
    )
    self.navigationController!.navigationBar.topItem!.backBarButtonItem = backButton

4

back button의 이름을 변경하는 가장 쉬운 방법은 view controllers 제목을 back button의 제목으로 설정 한 다음 view controllers 탐색 항목의 titleView를 실제 레이블이있는 사용자 정의 레이블로 바꾸는 것입니다. 이름.

이처럼 :

CustomViewController.m

@implementation CustomViewController

- (NSString*)title {
    return @"Back Button Title";
}

- (void)viewDidLoad {
    [super viewDidLoad];
    UILabel* customTitleView = [[UILabel alloc] initWithFrame:CGRectZero];
    customTitleView.text = @"Navigation Bar Title";
    customTitleView.font = [UIFont boldSystemFontOfSize:20];
    customTitleView.backgroundColor = [UIColor clearColor];
    customTitleView.textColor = [UIColor whiteColor];
    customTitleView.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
    customTitleView.shadowOffset = CGSizeMake(0, -1);

    [customTitleView sizeToFit];

    self.navigationItem.titleView = [customTitleView autorelease];
}

@end

이렇게하면 UINavigationBar의 타이틀이 마치 네이티브 인 것처럼 보입니다. 뷰 컨트롤러에 타이틀과 뒤로 버튼 타이틀을 분리 할 수있는 기능을 제공합니다.

뷰 컨트롤러 A 및 B의 경우 A는 뒤로 버튼의 모양을 알려주고 B는 표시됩니다.

편집 : 또한 뒤로 버튼 기본 모양 (왼쪽 화살표 막대 버튼 항목)을 유지합니다.


4

이 코드도 작동합니다. 이것을 네비게이션 컨트롤러의 루트 컨트롤러에 넣으십시오.

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

4

iOS의 새로운 기능이지만 내비게이션 컨트롤러 클래스를 재정의하는 간단한 답변을 제공 할 것입니다. push 및 pop 메서드를 간단히 재정의하고 이전 뷰 컨트롤러의 제목을 저장합니다. js 블록에 붙여 넣어 죄송합니다. 일반 코드 블록에 붙여 넣는 방법이 거의 혼란스럽지 않았습니다.

#import "MyCustomNavController.h"


@implementation MyCustomNavController {

    NSString *_savedTitle;
}

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated withBackBtnTitle:(NSString *)title {
    _savedTitle = self.topViewController.title;

    self.topViewController.title = title;
    [super pushViewController:viewController animated:animated];
}

- (UIViewController *)popViewControllerAnimated:(BOOL)animated {

    [self.viewControllers objectAtIndex:self.viewControllers.count - 2].title = _savedTitle;
    return [super popViewControllerAnimated:animated];
}

@end


4

self.navigationController.navigationBar.backItem.title = @"TEXT";

그리고 스위프트에서 :

self.navigationController?.navigationBar.backItem?.title = "TEXT"

3
self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] 
                                              initWithTitle:@"Log out" 
                                              style:UIBarButtonItemStyleDone 
                                              target:nil 
                                              action:nil] autorelease];

Parrent Controller의 코드에서 원하는 위치에 배치 할 수 있으므로 다른 자식보기에 대해 다른 백 버튼을 가질 수 있습니다.


3

대부분의 솔루션은 원하는 제목의 일반적인 버튼을 추가하면서 원래 스타일의 BackButton (왼쪽 화살표 막대 버튼)을 제거합니다.
따라서 원래 스타일을 유지하려면 다음 두 가지 방법이 있습니다.
첫째 : 문서화되지 않은 버튼 스타일 (110 또는 이와 유사한 것)을 사용하고 싶지 않습니다. 그러나 원하는 경우 여기에서 방법을 찾을 수 있습니다.
두 번째 : 나는 Trenskow의 아이디어를 사용합니다. 나는 그것을 좋아하고 조금 바꿨다.
-(NSString *) title을 재정의하는 대신 원래 제목을 다음과 같은 방식으로 유지하기로 결정했습니다.

- (void)viewDidLoad {
    [super viewDidLoad];
    static NSString * backButtonTitle=@"Back"; //or whatever u want

    if (![self.title isEqualToString:backButtonTitle]){

        UILabel* customTitleView = [[UILabel alloc] initWithFrame:CGRectZero];
        customTitleView.text = self.title; // original title
        customTitleView.font = [UIFont boldSystemFontOfSize:20];
        customTitleView.backgroundColor = [UIColor clearColor];
        customTitleView.textColor = [UIColor whiteColor];
        customTitleView.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
        customTitleView.shadowOffset = CGSizeMake(0, -1);

        [customTitleView sizeToFit];

        self.navigationItem.titleView = [customTitleView autorelease];
        self.title = backButtonTitle; 
    }
}

이 솔루션은 잘 작동하며 기본으로 보입니다. 또한 viewDidLoad 메소드에서 사용하면 한 번 이상 실행되지 않습니다.
또한 Jessedc의 솔루션을 시도했지만 좋지 않습니다. 원래 타이틀에서 BackButton의 원하는 뒤로 뒤로 타이틀 바 변경을 사용자에게 표시합니다.


2

이것은 이전에 게시 된 답변의 "간단한"버전으로 작동합니다.

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] init];

backButton.title = @"Go Back";

self.navigationItem.backBarButtonItem = backButton;

하위 뷰 또는 상세 뷰 (예 : UIViewController)가 아니라 상위 뷰 컨트롤러 (예 : 테이블 뷰 또는 UITableViewController가있는 뷰)에 코드를 배치해야합니다 .

다음과 같이 뒤로 버튼 문자열을 쉽게 지역화 할 수 있습니다.

backButton.title = NSLocalizedString(@"Back Title", nil);

2

우리는 두 개의 VC A와 B를 가지고 있습니다.

B에서 제목을 변경하려면 A로이 코드를 작성하십시오.

- (IBAction)goToBViewController:(UIButton *)sender {

    BViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"VC"];
    UIBarButtonItem *newBackButton = [[UIBarButtonItem alloc] initWithTitle:@"Your title here"
                                                                  style:UIBarButtonItemStylePlain
                                                                 target:nil
                                                                 action:nil];
    [[self navigationItem] setBackBarButtonItem:newBackButton];
    [self.navigationController pushViewController:vc animated:NO];

}

스위프트 4.1 Xcode 9.4

let secondViewController = self.storyboard?.instantiateViewController(withIdentifier: "VC"])
let newBackButton = UIBarButtonItem.init(title: "Your title here", style: UIBarButtonItemStyle.plain, target: nil, action: nil)
navigationController?.navigationBar.topItem?.backBarButtonItem = newBackButton
navigationController?.pushViewController(secondViewController!, animated: true)

1

Stan의 대답이 가장 좋았습니다. 그러나 탭 막대가있는 컨트롤러를 사용하고 컨트롤러 제목을 변경할 때 탭 막대의 제목도 변경할 수 있으므로 문제가 있습니다. 따라서 가장 좋은 대답은 view_controller.navigationItem.title 만 변경하고 view_controller.navigationItem을 사용하는 것입니다 함수에서 .title. 대답은 여기에 있습니다 : (ARC를 사용하여 뷰의 viewDidLoad에 추가하십시오)

  static NSString * back_button_title=@"Back"; //or whatever u want
  if (![view_controller.navigationItem.title isEqualToString:back_button_title]){
    UILabel* custom_title_view = [[UILabel alloc] initWithFrame:CGRectZero];
    custom_title_view.text = view_controller.navigationItem.title; // original title
    custom_title_view.font = [UIFont boldSystemFontOfSize:20];
    custom_title_view.backgroundColor = [UIColor clearColor];
    custom_title_view.textColor = [UIColor whiteColor];
    custom_title_view.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
    custom_title_view.shadowOffset = CGSizeMake(0, -1);

    [custom_title_view sizeToFit];

    view_controller.navigationItem.titleView = custom_title_view;
    view_controller.navigationItem.title = back_button_title;
  }

나 자신을 사용 하여이 기능을 viewDidLoad에 한 줄 코드가있는 기능을 갖습니다.

+ (void)makeSubViewHaveBackButton:(UIViewController*) view_controller{
  static NSString * back_button_title=@"Back"; //or whatever u want
  if (![view_controller.navigationItem.title isEqualToString:back_button_title]){
    UILabel* custom_title_view = [[UILabel alloc] initWithFrame:CGRectZero];
    custom_title_view.text = view_controller.navigationItem.title; // original title
    custom_title_view.font = [UIFont boldSystemFontOfSize:20];
    custom_title_view.backgroundColor = [UIColor clearColor];
    custom_title_view.textColor = [UIColor whiteColor];
    custom_title_view.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
    custom_title_view.shadowOffset = CGSizeMake(0, -1);

    [custom_title_view sizeToFit];

    view_controller.navigationItem.titleView = custom_title_view;
    view_controller.navigationItem.title = back_button_title;
  }
}

1

뒤로 단추의 텍스트를 동일한 텍스트로 변경하고 원래 왼쪽 화살표 모양을 유지하고 뒤로 단추를 클릭 할 때 수행하려는 작업을 수행하려면 " CustomNavigationController "를 둘러 보는 것이 좋습니다. .


1

문제 : 탐색 모음의 "뒤로"텍스트를 바꿀 수 없습니다.

이유 : 상위보기 컨트롤러의 .title 속성이 nil (또는 초기화되지 않음)로 설정되어 있으므로보기를 누른 후 탐색 표시 줄에 "뒤로"레이블이 설정되어 있습니다.

한 가지 해결책 : self.title = "Whatever ..."를 설정하면 새 뷰 컨트롤러를 누른 후 "뒤로"대신 "Whatever ..."가 나타납니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.