Làm cách nào để thay đổi tiêu đề của nút Quay lại trên mạng trên Thanh điều hướng


224

Hiện tại giá trị mặc định của nút thanh bên trái là tiêu đề của chế độ xem đã tải chế độ hiện tại, nói cách khác, chế độ xem sẽ được hiển thị khi nhấn nút (nút quay lại).

Tôi muốn thay đổi văn bản hiển thị trên nút thành một cái gì đó khác.

Tôi đã thử đặt dòng mã sau vào phương thức viewDidLoad của trình điều khiển xem nhưng có vẻ như nó không hoạt động.

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

Tôi nên làm gì?

Cảm ơn.

Câu trả lời:


345

Điều này nên được đặt trong phương thức gọi ViewContoder có tiêu đề "NewTitle". Ngay trước câu lệnh đẩy hoặc popViewControll.

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

47
Khi trong trình điều khiển khung nhìn con, việc gọi này từ trình điều khiển khung nhìn con sẽ không hoạt động. Bạn phải gọi cái này từ bộ điều khiển khung nhìn cha, trong khi trong bộ điều khiển khung nhìn con.
Alex Reynold

2
Để thay đổi nút quay lại cho bộ điều khiển chế độ xem cấp ba của tôi (lần đẩy thứ hai), tôi đã phải sử dụng dòng sau thay cho câu trả lời ở trên: [[self.parentViewControll navigationItem] setBackBarButtonItem: newBackButton]; Tôi có làm điều gì sai?
JonB

4
Jordan nói rằng ông "[thêm] một chút rõ ràng hơn về nơi để đặt mã." Ở đây thậm chí còn rõ ràng hơn: đặt nó trong bộ điều khiển đầu tiên (còn gọi là cha mẹ), ngay trước lệnh gọi để đẩy bộ điều khiển thứ hai (còn gọi là con).
benvolioT

1
bạn có thể tạo một BaseViewContaptor tùy chỉnh và đặt nó vào-viewDidLoad:
ArtFeel

2
Bạn không cần phải làm điều này ngay trước khi đẩy hoặc bật. Bạn có thể làm điều đó trong viewDidLoad hoặc loadView hoặc bất cứ nơi nào khác bạn đặt tiêu đề và các thuộc tính khác cho chế độ xem này. Câu trả lời của Victor Bogdan dưới đây rõ ràng hơn, IMHO.
Joe Strout 4/12/13

98

Trong ChildVC điều này làm việc cho tôi ...

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

Hoạt động trong Swift quá!

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

4
Đã thử nghiệm và xác minh trên iOS 7 trong Xcode 5.0.2. Điều này S change thay đổi tiêu đề của màn hình trước thành Trở lại khi bạn quay lại.
Alex Zavatone

Giải pháp đơn giản nhất. Hoạt động trên cả iOS 6 và 7. Đặt UIViewContoder cơ bản và hoàn tất. Tốt hơn nhiều so với giải pháp IB hoặc cài đặt trong vc đẩy.
Eric Chen

46
nó thay đổi tiêu đề của bộ điều khiển chế độ xem trước đó, đó là vấn đề trong giải pháp này
Nikita

2
@Nikita, Bạn có thể đặt lại lát xếp trong viewWillDisappear
Dan Beaulieu

81

Đây là tài liệu cho backBarButtonItem :

"Khi mục điều hướng này nằm ngay bên dưới mục trên cùng trong ngăn xếp, bộ điều khiển điều hướng lấy nút quay lại cho thanh điều hướng từ mục điều hướng này. [...] Nếu bạn muốn chỉ định hình ảnh hoặc tiêu đề tùy chỉnh cho nút quay lại , bạn có thể chỉ định một mục nút thanh tùy chỉnh (với tiêu đề hoặc hình ảnh tùy chỉnh của bạn) cho thuộc tính này. "

Xem Trình điều khiển A (trình điều khiển xem "cha mẹ" ):

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

Khi bất kỳ bộ điều khiển xem B nào khác ở trên cùng của ngăn điều hướng và A ở ngay bên dưới nó, nút quay lại của B sẽ có tiêu đề "Ngắn" .


4
phần khó khăn là bạn cần đặt nút quay lại trong bộ điều khiển khung nhìn PARENT chứ không phải chế độ xem con. Đã lãng phí một giờ chỉ cần tìm ra điều này.
Merkurial

56

trong Xcode 4.5 bằng cách sử dụng bảng phân cảnh, cho đến nay, giải pháp đơn giản nhất tôi đã tìm thấy khi giá trị của nút Quay lại không phải thay đổi linh hoạt là sử dụng trường "Nút quay lại" được liên kết với Mục điều hướng của Trình điều khiển xem mà bạn muốn nút "Quay lại" để nói điều gì khác.

ví dụ: trong ảnh chụp màn hình bên dưới, tôi muốn nút Quay lại cho (các) trình điều khiển chế độ xem mà tôi ấn để có "Quay lại" làm tiêu đề của nút Quay lại.

nhập mô tả hình ảnh ở đây

Tất nhiên, điều này sẽ không hoạt động nếu bạn cần nút quay lại để nói điều gì đó hơi khác nhau mỗi lần có một giải pháp khác ở đây cho việc đó.


Câu hỏi ban đầu không nói gì về việc sử dụng bảng phân cảnh, vì vậy chắc chắn đây không phải là câu trả lời được chấp nhận, tuy nhiên, đây là một giải pháp dành cho phát triển dựa trên bảng phân cảnh.
Villapossu

42

Tôi biết, câu hỏi rất cũ, nhưng tôi tìm thấy một giải pháp tốt đẹp.

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

Hoạt động từ childView! Đã thử nghiệm với iOS 7.


Điều này dường như chỉ làm việc đến một cấp độ. Nó không làm việc cho một đứa trẻ của một đứa trẻ đối với tôi. iOS 8.
narco

26

Có thể tôi đang quá đơn giản nhưng từ tài liệu của Apple, từ ngữ là:

Nếu một mục nút thanh tùy chỉnh không được chỉ định bởi một trong hai bộ điều khiển chế độ xem, nút quay lại mặc định được sử dụng và tiêu đề của nó được đặt thành giá trị của thuộc tính tiêu đề của bộ điều khiển chế độ xem trước đó, đó là bộ điều khiển chế độ xem giảm một cấp ngăn xếp.

Giải pháp được đánh dấu đúng ở trên đặt một mục nút mặc định từ bộ điều khiển chính. Đây là câu trả lời đúng, nhưng tôi đang giải quyết vấn đề bằng cách thay đổi self.titlethuộc tính của UIViewContoder ngay trước khi đẩy bộ điều khiển mới lên ngăn xếp NavigationContoder.

Điều này sẽ tự động cập nhật tiêu đề của nút quay lại trên bộ điều khiển tiếp theo và miễn là bạn đặt self.titlelại về những gì cần có trong viewWillAppeartôi không thể thấy phương thức này gây ra quá nhiều vấn đề.


19

Công việc này tốt hơn cho tôi. Thử :

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

19

Trong Swift / iOS8, những điều sau đây có hiệu quả với tôi:

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

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

Chuyển từ câu trả lời của Felipe.


Cú pháp nhanh của 1.1 làself.navigationController?.navigationBar.topItem?.backBarButtonItem
Warren Burton

3
Phong cách nên là UIBarButtonItemStyle.Plain
Micro

2
Cảm ơn vì điều đó. Thật là một API thực sự thảm hại. Và đại diện của UIKit nói chung. Giữa các thanh điều hướng và Thanh trạng thái trong iOS, thật ngạc nhiên khi chúng tôi vẫn phát triển cho nền tảng chết tiệt này. Cảm ơn jesus bé vì Stack Overflow và những người đóng góp của nó!
Womble

@Wobmle: Bạn nên phát triển cho Android trong một vài tháng;)
fl034

17

Ok, đây là cách. Nếu bạn có bộ điều khiển xem "đầu tiên" và bạn điều hướng một bộ điều khiển xem khác "thứ hai" bằng cách nhấn nút hoặc vv, bạn cần thực hiện một số công việc. Trước tiên, bạn cần tạo một BarButtonItem trong phương thức ViewDidLoad của trình điều khiển xem "thứ hai" như thế này;

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

Sau khi bạn làm điều đó, bạn cần viết mã cho hành động "btnBack" trong cùng một tệp .m như thế này;

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

Đó là tất cả.


2
A leftBarButtonItemkhông có sự xuất hiện của a backBarButtonItem, nếu đó là điều quan trọng trong thiết kế ứng dụng.
Alex Reynold

1
Trong số các giải pháp được đăng (cảm ơn bạn rất nhiều) thì giải pháp này dường như hoạt động, mặc dù như Alex đã nêu ở trên, nút thanh bên trái không giống như một mục thanh phía sau. Làm thế nào tôi có thể làm cho nó trông giống như một mục thanh trở lại ???
Dale

17

Tôi đã có một bộ điều khiển xem cha mẹ với một tiêu đề thực sự dài. Điều này dẫn đến văn bản nút quay lại chảy máu vào tiêu đề của trình điều khiển xem con.

Sau khi thử một loạt các giải pháp khác nhau, đây là những gì tôi đã làm (mở rộng theo cách tiếp cận @ john.k.doe):

Sử dụng Xcode 7.2, Swift 2

  1. Trong Storyboard, thêm một Navigation Itemđến Chánh View Controller cảnh (không phải là con VC)

mục điều hướng

  1. Trên Attributes Inspectortrang mới của bạn Navigation Item, nhập một spaceký tự trong Back Buttontrường. Thêm về điều này sau.

mục điều hướng trong Chế độ xem phân cấp

thêm một ký tự khoảng trắng vào trường Nút Quay lại

  1. Trong trình điều khiển khung nhìn Parent , thêm đoạn mã sau:

đoạn trích:

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

Giải trình:

Loại nút quay lại thuộc về bộ điều khiển xem cha. Việc Navigation Itemcung cấp cho bạn một nút điều khiển cho nút quay lại, do đó bạn có thể đặt tiêu đề theo mã hoặc trong Bảng phân cảnh.

Ghi chú:

Nếu bạn để lại Navigation Item Back Buttonvăn bản dưới dạng chuỗi trống mặc định, tiêu đề nút quay lại sẽ trở thành "Quay lại".

Các cách tiếp cận khác hoạt động, tại sao sử dụng phương pháp này?:

Mặc dù có thể ghi đè tiêu đề nút quay lại trên bộ điều khiển chế độ xem trẻ em, nhưng thật khó khăn khi xử lý nó cho đến khi nó xuất hiện nhanh trên màn hình.

Một số cách tiếp cận xây dựng một nút quay lại mới và ghi đè lên nút hiện có. Tôi chắc chắn rằng nó hoạt động, và có lẽ cần thiết trong một số trường hợp sử dụng. Nhưng tôi thích tận dụng các API hiện có khi có thể.

Thay đổi titlebộ điều khiển khung nhìn cha mẹ là giải pháp nhanh nhất cho một số tình huống. Tuy nhiên, điều này thay đổi tiêu đề cha mẹ để bạn phải quản lý trạng thái. Mọi thứ cũng trở nên lộn xộn với một Tab Bar Controllerthay đổi tiêu đề gây ra tác dụng phụ với các Tab Bar Itemtiêu đề.


10

Đối với những người sử dụng bảng phân cảnh, chỉ cần chọn khung điều khiển chính (không phải khung hình đang giữ chế độ xem mục tiêu) (hãy chắc chắn bạn nhấp chuột phải vào thanh Điều hướng, sau đó mở trình kiểm tra thuộc tính, nơi bạn sẽ tìm thấy ba đầu vào biểu mẫu. nút quay lại "là chúng tôi đang tìm kiếm.


4
đây là giải pháp tốt nhất nếu bạn không quan tâm đến nội địa hóa.
MiQUEL

7

Phiên bản Swift:

Trong con của bạn ViewContoder:

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

điều này thực sự sẽ thay đổi tiêu đề của trình điều khiển khung nhìn trước đó trong ngăn xếp thành "văn bản", ít hơn lý tưởng.
gravitron

6

Đây là một cách khác để làm điều đó.

Trong trình điều khiển xem cha mẹ của bạn, thực hiện phương pháp sau:

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

Trong trình điều khiển xem con của bạn, khi bạn muốn thay đổi tiêu đề, điều này sẽ hoạt động:

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

Tôi không bao giờ có thể có được parentViewControllertài sản để làm việc:

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

Tôi không biết đó là lỗi hay tôi không sử dụng đúng cách. Nhưng việc nắm lấy bộ điều khiển khung nhìn thứ hai đến cuối cùng trong các viewControllersmảng chỉ tới bộ điều khiển khung nhìn cha và tôi có thể gọi các phương thức cha chính xác với tham chiếu đó.


6

đồng ý. Cá nhân tôi ghét tất cả các lựa chọn này. Vì vậy, tôi đã đưa ra với riêng tôi.

Dựa trên thông tin tôi đã thấy. Dường như bộ điều khiển chế độ xem Trước đó đang điều khiển nút "Quay lại" của chính nó sẽ được trình bày trên bộ điều khiển chế độ xem đẩy.

Tôi đã tạo một phương thức Lazy Load cho navigationItem trên bộ điều khiển muốn Nút Back được thay đổi.

Của tôi là một người kiểm soát người mua mời

Mời người mua là văn bản được đặt theo mặc định.

nhưng nút quay lại cần được mời

Đây là mã mà tôi đã sử dụng để tạo nút quay lại.

Tôi đã đặt mã này vào đầu tệp Thực hiện (.m) của Bộ điều khiển và nó tự động áp đảo phương thức của siêu.

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

    return item;
}

Tôi cảm thấy đây là một cách thanh lịch hơn nhiều để thực hiện điều này.

Tôi đặt mã này ở một nơi và nó sẽ tự động được điền khi cần.

Không cần phải gọi mã trước mỗi yêu cầu đẩy.

Hi vọng điêu nay co ich


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

5

Đây là câu trả lời:

Trong viewDidAppear:animated(KHÔNG trong viewDidLoad) làm như sau

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

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

Rằng nếu bạn muốn giữ hình dạng của nút quay lại.


Không tệ ngoại trừ việc họ có thể thấy nó thay đổi tiêu đề. Tôi đã thử trong viewWillAppear và nó không hoạt động.
Travis M.

5

Không có giải pháp nào được giải thích ở đây làm việc cho tôi. Vì vậy, những gì tôi đã làm là loại bỏ tiêu đề khỏi cảnh mà tôi đến theo cách sau:

self.title = @"";

Vì vậy, khi cảnh mới được trình bày, văn bản trở lại không xuất hiện.

Tôi tuyệt đối đồng ý rằng đây không phải là một giải pháp rõ ràng, nhưng đã có hiệu quả và không có giải thích nào phù hợp với tôi.


Man, tôi phải nói với bạn, đó là năm 2017 và vẫn còn khó khăn khi sử dụng nút $$ để xử lý nút quay lại. Phương pháp của bạn đã làm việc cho tôi và tôi đã kết thúc bằng dấu "<" mặc dù tôi muốn từ "Hủy", nhưng tôi sẽ giải quyết cho những gì tôi nhận được. :)
AnBisw

5

Tôi thấy rằng tốt nhất là thay đổi tiêu đề của bộ điều khiển chế độ xem hiện tại trong ngăn xếp điều hướng thành văn bản mong muốn của nút quay lại trước khi đẩy sang bộ điều khiển chế độ xem tiếp theo.

Ví dụ

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

Sau đó, trong viewDidAppear đặt tiêu đề trở lại tiêu đề mong muốn cho VC gốc. Voila!


5

Dành cho Swift:

    // 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

Tôi đã tìm thấy, cách dễ nhất để thay đổi tên của nút quay lại là đặt tiêu đề của bộ điều khiển chế độ xem thành tiêu đề của nút quay lại, sau đó thay thế tiêu đề Xem trong mục điều hướng của bộ điều khiển xem thành nhãn tùy chỉnh bằng nhãn thật Tên.

Như thế này:

CustomViewControll.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

Điều này sẽ làm cho tiêu đề của bạn trong UINavestionBar trông như thể nó là bản địa. Cung cấp cho trình điều khiển chế độ xem khả năng có tiêu đề tách biệt và tiêu đề nút quay lại.

Trong trường hợp bộ điều khiển xem A và B, A có trách nhiệm cho biết nút quay lại sẽ trông như thế nào, trong khi B được hiển thị.

EDIT: Điều này cũng duy trì giao diện gốc của nút quay lại (Mục nút thanh mũi tên bên trái).


4

Mã này hoạt động quá. Đặt cái này vào bộ điều khiển gốc của bộ điều khiển điều hướng:

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

4

Tôi mới sử dụng iOS nhưng tôi sẽ cung cấp câu trả lời rất đơn giản của mình về việc ghi đè lớp trình điều khiển điều hướng. Tôi có ghi đè đơn giản các phương thức đẩy và bật và lưu tiêu đề của trình điều khiển xem trước đó. Xin lỗi vì đã dán trong khối js. Có chút bối rối làm thế nào để vượt qua nó trong khối mã bình thường.

#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";

Và trong Swift:

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

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

bạn có thể đặt nó bất cứ nơi nào bạn thích trong mã trong bộ điều khiển parrent, cho phép bạn có các nút bấm khác nhau cho các khung nhìn con khác nhau.


3

Hầu hết các giải pháp giết chết kiểu gốc của BackButton (Nút thanh mũi tên bên trái) trong khi thêm một nút thông thường với tiêu đề mong muốn.
Vì vậy, để giữ kiểu dáng ban đầu, có 2 cách: Thứ
nhất: Sử dụng kiểu nút không có giấy tờ (110 hoặc đại loại như thế) mà tôi không muốn làm. Nhưng nếu bạn muốn bạn có thể tìm thấy cách thực hiện ở đây, trên stackoverflow.
Lần 2: Để sử dụng ý tưởng của Trenskow. Tôi thích nó và tôi sử dụng nó một chút thay đổi.
Thay vì ghi đè - tiêu đề (NSString *), tôi đã quyết định giữ tiêu đề ban đầu theo cách sau (cho phép tôi sử dụng các tiêu đề của nib cũng như tiêu đề được đưa ra ở trạng thái đẩy btw).

- (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; 
    }
}

Giải pháp này hoạt động tốt và nó có vẻ bản địa. Ngoài ra, nếu sử dụng nó trong phương thức viewDidLoad, nó sẽ ngăn việc thực thi nhiều hơn 1 lần.
Ngoài ra, tôi đã thử một giải pháp của Jessedc nhưng nó có vẻ tệ. Nó gây ra sự thay đổi hiển thị cho thanh tiêu đề của người dùng khi đang di chuyển từ bản gốc sang bản gốc và bản mong muốn của BackButton.


2

Điều này làm việc với tôi như là một phiên bản "đơn giản hóa" của các câu trả lời được đăng trước đó.

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

backButton.title = @"Go Back";

self.navigationItem.backBarButtonItem = backButton;

Hãy nhớ đặt mã bên trong trình điều khiển khung nhìn cha (ví dụ: khung nhìn có chế độ xem bảng của bạn hoặc UITableViewCont kiểm), chứ không phải dạng xem con hoặc chi tiết (ví dụ: UIViewControll).

Bạn có thể dễ dàng bản địa hóa chuỗi nút quay lại như thế này:

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

2

Chúng tôi có hai VC và A và B.

Nếu bạn muốn thay đổi tiêu đề trong B, hãy viết mã này vào 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];

}

Swift 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

Câu trả lời của Stan là câu trả lời hay nhất. Nhưng nó cũng có một vấn đề, khi bạn sử dụng bộ điều khiển với Tab Bar và thay đổi tiêu đề của bộ điều khiển, bạn cũng có thể thay đổi tiêu đề của Tab Bar. Vì vậy, câu trả lời tốt nhất là chỉ thay đổi view_controll.navlationItem.title .title trong chức năng. Câu trả lời là đây: (Với ARC và thêm chúng vào viewDidLoad của view)

  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;
  }

Trong bản thân tôi sử dụng, tôi biến nó thành một hàm như thế này, chỉ cần có tính năng với một mã dòng trong 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

Nếu bạn muốn không chỉ để thay đổi nội dung của nút Back để cùng văn bản và giữ nguyên gốc trái mũi tên hình dạng, mà còn để làm điều gì đó khi người dùng nhấp vào nút Quay lại, tôi khuyên bạn nên có một cái nhìn xung quanh tôi " CustomNavigationController " .


1

VẤN ĐỀ: Không thể thay thế văn bản "Quay lại" trong thanh điều hướng.

LÝ DO: Nhãn "Quay lại" được đặt trong thanh điều hướng sau khi đẩy chế độ xem vì thuộc tính .title trong trình điều khiển chế độ xem chính được đặt thành không (hoặc không được khởi tạo).

MỘT GIẢI PHÁP: Nếu bạn đặt self.title = "Sao cũng được ..." bạn sẽ thấy thay vì "Quay lại" sẽ xuất hiện "Sao cũng được ..." sau khi đẩy bộ điều khiển chế độ xem mới.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.