Cách thay đổi văn bản trên nút quay lại


90

Theo mặc định, nút quay lại sử dụng làm văn bản trên đó là tiêu đề của bộ điều khiển chế độ xem. Tôi có thể thay đổi văn bản trên nút quay lại mà không thay đổi tiêu đề của bộ điều khiển chế độ xem không? Tôi cần cái này vì tôi có một bộ điều khiển chế độ xem mà tiêu đề quá dài để hiển thị và trong trường hợp này, tôi chỉ muốn hiển thị "Quay lại" làm phụ đề cho nút quay lại.

Tôi đã thử những cách sau không hoạt động:

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

Cảm ơn.


3
Hãy nhớ rằng các nút quay lại có tiêu đề là có lý do. Bằng cách thay đổi tiêu đề thành "Quay lại", bạn đang cướp đi thông tin của người dùng về những gì nút quay lại.
Simon

Câu trả lời:


167

Thử

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

Tôi đã tìm thấy điều đó bằng cách xem tài liệu backBarButtonItem trong tài liệu của Apple cho UINavigationItem .


1
Xin lỗi, tôi không có cơ hội để kiểm tra điều này ngay bây giờ, nhưng điều này có áp dụng hình dạng nhọn bên trái của các nút Quay lại tích hợp sẵn hay nó giữ nguyên hình dạng hình chữ nhật mặc định của UIBarButtonItem?
Marco

Tôi thực sự không chắc. Tôi giả sử rằng nó sẽ chỉ giữ hình dạng nút quay lại tự động vì bạn đang thiết lập thuộc tính backButton, nhưng bạn phải kiểm tra nó để tìm hiểu. Tôi cũng tò mò.
Marc W

2
Vâng, nó đã hoạt động! Nó có thay đổi tiêu đề và có, lưu hình dạng. Cảm ơn vì đã giúp đỡ.
Ilya Suzdalnitski

1
Lưu ý: nút quay lại được giữ lại hai lần [1 lần từ cấp phát, 1 lần đối với thuộc tính giữ lại]. Tuy nhiên, nếu bạn không thay đổi nút quay lại, nó hoàn toàn vô hại.
Kelvin

29
Xem nhận xét của Marco bên dưới - bạn nên gọi điều này trên bộ điều khiển sắp đẩy một cái gì đó mới, chứ không phải trên bộ điều khiển đang được đẩy.
Hóa đơn

97

Cách tiếp cận của Marc W đã hoạt động hiệu quả khi tôi tìm ra bộ điều khiển nào để áp dụng nó: cái được đặt lại tiêu đề, không phải cái ở trên cùng. Vì vậy, nếu đây là ngăn xếp điều hướng:

(bottom)  ControllerA -> ControllerB  (top)

... và bạn muốn đặt tiêu đề ngắn hơn cho ControllerA trong nút quay lại hiển thị khi ControllerB ở trên cùng , bạn áp dụng thay đổi thuộc tính cho ControllerA .

Vì vậy, nó nhiều hơn trong ngữ cảnh self.title, không giống như các bộ định vị nút trái / phải khác.


13
Đây là một chi tiết rất quan trọng.
Hóa đơn

4
wcochran, nó hoạt động với bảng phân cảnh, chỉ cần đảm bảo rằng bạn đặt Nút Quay lại của bộ điều khiển mẹ. Vì vậy, nếu bạn có bộ điều khiển A trỏ đến bộ điều khiển B (thông qua bảng phân cảnh), ngoài việc tùy chỉnh văn bản cho nút Quay lại trong bộ điều khiển B, bạn phải đặt thuộc tính "Nút Quay lại" cho bộ điều khiển A trong trình chỉnh sửa bảng phân cảnh.
làm gián đoạn

Cảm ơn Marco. Điều tôi cảm thấy về câu hỏi này là mọi người đang cố gắng trả lời (và trả lời đúng) nhưng không phải cho câu hỏi đang được hỏi. Về cơ bản, bạn đã đánh đinh vào đầu và chính xác. Cảm ơn vì điều đó!
theiOSguy

+1 cho chi tiết quan trọng. Câu trả lời trên sẽ không phù hợp với bạn trừ khi bạn hiểu câu trả lời NÀY.
baptzmoffire.

Bạn nói đúng, bàn phím trên MacBook One mới hơi khó làm quen.
Mason G. Zhwiti

48

Bạn có thể làm điều đó trong bảng phân cảnh. Tìm bộ điều khiển chế độ xem bạn muốn quay lại (cái có tiêu đề dài), chọn đó là Mục điều hướng và mở Trình kiểm tra thuộc tính (Alt + Cmd + 4), chèn tiêu đề Nút Quay lại tùy chỉnh.

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


Đây chính xác là những gì tôi cần vì tôi muốn tất cả các nút quay lại có Văn bản "Quay lại" thay vì các tiêu đề điều hướng của bộ điều khiển trước đó.
Dave

8
Chỉ cần lưu ý, văn bản nút quay lại được đặt trên chế độ xem mà bộ điều khiển tiếp theo được đẩy từ đó, không phải bộ điều khiển chế độ xem bạn hiện đã hiển thị.
Darbio

Đây là một giải pháp đơn giản tốt, nhưng xin đừng đổi tên tất cả các nút quay lại của bạn thành "Quay lại", nó đi ngược lại với HIG của Apple và đánh bại một phần mục đích của nút quay lại. :(
Samuel Goodwin

Làm việc rất tốt. Chỉ cần nhớ LƯU tệp Storyboard. Lần thử đầu tiên của tôi không thành công vì tôi không nhận thấy Bảng phân cảnh chưa được lưu! Và có, bạn thay đổi nút QUAY LẠI trên bộ điều khiển chế độ xem bạn đang đến!
EricWasTaken

Rất tốt, nhưng nếu tôi muốn chỉ để lại mũi tên, không có bất kỳ văn bản nào? :)
Iurii Vasylenko

40

Cảm ơn Marco ... điều đó đã giúp tôi ...

Đây là những gì tôi đã làm.

Nếu bạn đang sử dụng tableView để điều hướng đến các chế độ xem khác nhau ... hãy đặt mã:

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

Trong didSelectRowAtIndexPathphương thức của bạn ... của Bộ điều khiển đầu tiên ... Bộ điều khiển A.

Khi bạn điều hướng đến Bộ điều khiển B, nút sẽ có tiêu đề "Quay lại".


1
Cảm ơn bạn @Ben thân yêu. Đó chính xác là những gì tôi đang tìm kiếm :).
Arslan

12

Nút quay lại kéo văn bản của nó từ tiêu đề của bộ điều khiển chế độ xem chính.

Trong bộ điều khiển chế độ xem chính (bộ điều khiển chế độ xem xuất hiện khi bạn nhấn vào nút quay lại), hãy đặt tiêu đề của chính nó làm văn bản mong muốn trên nút quay lại.

Ví dụ, giả sử chúng ta có một RootViewControllerlớp học. Khi chúng ta nhấp vào một ô trong chế độ xem bảng của nó, chúng ta sẽ đẩy một phiên bản của SecondViewController. Chúng tôi muốn nút quay lại của SecondViewControllerphiên bản có nội dung "Trang chủ".

trong viewDidLoadphương thức của RootViewController.m :

self.title = @"Home";

trong viewDidLoadphương thức của SecondViewController.m :

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

Nếu bạn muốn nút quay lại của mình đọc, "Quay lại", hãy đặt tiêu đề của bộ điều khiển chế độ xem chính thành @"Back";


10

Điều này làm việc tốt hơn cho tôi. Thử :

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

1
Câu trả lời tuyệt vời làm việc hoàn hảo. nó phải được đánh dấu là ngoại trừ.
Muhammad Rizwan

9

Nếu bạn đang sử dụng bảng phân cảnh:

  1. Mở StoryBoard
  2. Trong cửa sổ Document Outline, tìm ViewController mà bạn muốn quay lại
  3. Nhấp vào Mục điều hướng của ViewController đó
  4. Trong trình khám phá Thuộc tính thay đổi giá trị Nút Quay lại thành ô tùy chỉnh của bạn

Đó là nó, tận hưởng ...


5

Và trong MonoTouch các hoạt động sau (trong ViewDidLoad của bộ điều khiển mẹ):

NavigationItem.BackBarButtonItem = new UIBarButtonItem( "Back", UIBarButtonItemStyle.Plain, null);

3
[self.navigationItem setBackBarButtonItem:[[UIBarButtonItem alloc]
  initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:nil action:nil]];

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


3

Trong bộ điều khiển chế độ xem chính của bạn, hãy đặt nút quay lại khi chế độ xem tải:

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Do any additional setup after loading the view.
    self.navigationItem.backBarButtonItem = 
       [[UIBarButtonItem alloc] initWithTitle:@"title" 
                                        style:UIBarButtonItemStylePlain 
                                       target:nil 
                                       action:nil];

}

Lưu ý rằng chúng tôi không cần đưa autoreleasevào cuối phiên bản iOS mới nhất.

Hi vọng điêu nay co ich!


1

[self.navigationController.navigationBar.backItem setTitle:@"back"];

Nó làm việc cho tôi. Bạn có thể thay thế "back" bằng một cái gì đó khác.


Khi trả lời bằng mã, hãy luôn giải thích vấn đề với mã được cung cấp là gì và cách mã của bạn khắc phục sự cố.
Lukas Knuth

1

Cái này phù hợp với tôi nếu bạn không muốn có danh hiệu!

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

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

0

Cuối cùng tôi đã biết tại sao những câu trả lời này không phù hợp với tôi lúc đầu. Tôi đặt tiêu đề trong bảng phân cảnh. Khi tôi đặt tiêu đề trên mã. nó hoạt động!

self.navigationItem.title = @"Main Menu";
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@" " style:UIBarButtonItemStyleBordered target:nil action:nil];
[[self navigationItem] setBackBarButtonItem:backButton];

Trong tương lai, bạn có thể muốn tạo các bài đăng như thế này dưới dạng nhận xét về câu trả lời không phù hợp với bạn.
Keith Smiley,

0

Giải pháp của tôi là đặt tiêu đề khi bộ điều khiển chế độ xem được đẩy đến ngăn xếp điều hướng và đặt lại nó bằng cách sử dụng phương thức ủy quyền trước khi vc được đẩy đóng:

Vì vậy, tôi đặt thay đổi tiêu đề trong việc gọi bộ điều khiển chế độ xem khi tôi đẩy bộ điều khiển chế độ xem khác như:

self.pushedVC = [self.storyboard instantiateViewControllerWithIdentifier:@"pushedVCIdentifier"];
self.pushedVC.delegate = self;   
[self.navigationController pushViewController:self.pushedVC animated:YES];
self.title = @"Back";

và trong hàm gọi lại ủy quyền (mà tôi gọi trong viewWillDissapear):

-(void)pushedVCWillClose:(PushedVC *)sender
{
    self.title = @"Previous Title";
}

0

Nếu bạn không chỉ muốn thay đổi văn bản của nút Quay lại và giữ nguyên hình dạng mũi tên trái ban đầu mà còn muốn thực hiện đ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 xem qua " CustomNavigationController " của tôi .


0

// Bạn có thể đạt được điều này bằng cách đặt tiêu đề trong bộ điều khiển chế độ xem trước đó như hình dưới đây

override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        //Set Title for this view
        self.navigationItem.title = "My Title"

}

override func viewWillDisappear(animated: Bool) {
        super.viewWillAppear(animated)
        //Set Title for back button in next view 
        self.navigationItem.title = "Back"
}

0

Để thay đổi tiêu đề nút quay lại, hãy tham khảo mã bên dưới

InformationVC *infoController=[[InformationVC alloc]init];[self.navigationController infoController animated:YES];

//Below code changed back button title on InformationVC page.
UIBarButtonItem *backBarButton = [[UIBarButtonItem alloc] initWithTitle:@"Information" style: UIBarButtonItemStylePlain target: nil action: nil];
self.navigationItem.backBarButtonItem = backBarButton;`enter code here`


-1

Điều này đã làm việc cho tôi:

self.navigationController.navigationBar.topItem.title = "Back"
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.