iPhone: Đặt tiêu đề thanh điều hướng


87

Này các bạn. Tôi vẫn còn khá mới với việc phát triển iPhone và tôi đang gặp một chút khó khăn khi tìm cách thay đổi tiêu đề của Thanh điều hướng của mình. Đối với một câu hỏi khác trên trang web này, ai đó đã đề xuất sử dụng:

viewController.title = @"title text";

nhưng điều đó không hiệu quả với tôi ... Tôi có cần thêm UINavigationController để thực hiện việc này không? Hoặc có thể chỉ là một ổ cắm từ lớp con UIViewController của tôi? Nếu nó hữu ích, tôi đã xác định thanh điều hướng trong IB và tôi đang cố gắng đặt tiêu đề của nó trong lớp con UIViewController của mình. Đây là một trong những điều đơn giản khác khiến tôi đau đầu. Đặt self.title = @ "tiêu đề văn bản"; vào viewDidLoadinitWithNibNamecũng không hoạt động. Có ai biết chuyện gì đang xảy ra và làm thế nào để làm cho nó xảy ra đúng không?

Cảm ơn!

Câu trả lời:


154

Bộ điều khiển chế độ xem phải là con của một số UINavigationController để thuộc .titletính có hiệu lực. Nếu UINavigationBar chỉ là một dạng xem, bạn cần đẩy một mục điều hướng có chứa tiêu đề hoặc sửa đổi mục điều hướng cuối cùng:

UINavigationItem* item = [[UINavigationItem alloc] initWithTitle:@"title text"];
...
[bar pushNavigationItem:item animated:YES];
[item release];

hoặc là

bar.topItem.title = @"title text";

8
Chà. Tôi đã nghiêm túc dành một giờ vừa qua để duyệt qua các diễn đàn và tài liệu để cố gắng tìm ra điều này, và tôi đã thuyết phục bản thân rằng nó sẽ phức tạp hơn thế này. Mã này rất đơn giản và tôi không phải thao tác lại bất cứ thứ gì trong IB. Hoàn hảo! KennyTM, bạn thật tuyệt. Nếu tôi nhớ lại, bạn cũng đã trả lời câu hỏi NSDate của tôi và bắt tôi phải nghiên cứu từ điển. Bạn là người yêu thích mới của tôi trên trang web này. Cảm ơn rất nhiều cho tất cả sự giúp đỡ của bạn!
Arthur Skirvin

5
nhận xét của bạn làm tôi mỉm cười và tự hỏi: có ai đã từng kết bạn ở đây trong SO bao giờ chưa? thường tất cả mọi người ở đây rất hữu ích nhưng dường như không biểu lộ bất cứ cảm xúc con người (ngoại trừ hỏi tất nhiên khi anh / cô ấy thất vọng)
maltalef

Xem câu trả lời của Sorin để biết giải pháp tương thích với bảng phân cảnh.
defos1

Cảm ơn câu trả lời của bạn thực sự giúp tôi tiết kiệm rất nhiều thời gian. :) @kennytm
jerry_sjtu

124

nếu bạn đang làm tất cả bằng mã trong viewDidLoadphương pháp của UIViewControllerbạn, bạn chỉ nên thêmself.title = @"title text";

một cái gì đó như thế này:

- (void)viewDidLoad {
    [super viewDidLoad];
    self.title = @"title";
}

bạn cũng có thể thử self.navigationItem.title = @"title";

cũng kiểm tra xem navigationItem của bạn có rỗng không và nếu bạn đã đặt nền tùy chỉnh cho thanh điều hướng, hãy kiểm tra xem tiêu đề có được đặt không.


@ SorinA, Cảm ơn. Đó là cách tốt hơn để đặt tiêu đề cho thanh điều hướng.
Tirth

33

Có một vấn đề với việc sử dụng self.title = @"title";

Nếu bạn đang sử dụng Thanh điều hướng cùng với thanh Tab, dòng trên cũng thay đổi nhãn cho Mục thanh tab. Để tránh điều này, hãy sử dụng những gì @testing đề xuất

self.navigationItem.title = @"MyTitle";

13

Nếu bạn muốn thay đổi tiêu đề thanh điều hướng (không phải tiêu đề nút quay lại thanh điều hướng!) Thì mã này sẽ hoạt động.

self.navigationController.topViewController.title = @"info";

9

Nếu bạn muốn thay đổi tiêu đề của navBar bên trong bộ điều khiển tabBar, hãy làm như sau:

-(void)viewDidAppear:(BOOL)animated {
    self.navigationController.navigationBar.topItem.title = @"myTitle";
}

viewDidAppear đã thực hiện thủ thuật cho tôi sau 2 giờ cố gắng giải quyết vấn đề này. Cảm ơn :)
Tchelow

topItem.title có thể là tiêu đề của thanh điều hướng hoặc không. Nếu đó là màn hình cấp cao nhất không có nút quay lại, nó sẽ đặt tiêu đề. Nhưng nếu bạn có nút quay lại, thì topItem.title thực sự là tiêu đề nút quay lại.
user2962499 Ngày

5

Trong ứng dụng dựa trên điều hướng của tôi, tôi làm điều này:

myViewController.navigationItem.title = @"MyTitle";

4

Tôi đã có bộ điều khiển điều hướng được tích hợp trong TabbarController. Điều này đã hoạt động

self.navigationItem.title=@"title";

4

Theo mặc định, bộ điều khiển điều hướng hiển thị tiêu đề của 'topitem'

vì vậy bạn có thể làm trong phương thức viewdidload của appdelegate. Tôi đã thử nghiệm nó và nó hoạt động

navController.navigationBar.topItem.title = @"Test";

2
UINavigationItem* item = [[UINavigationItem alloc] initWithTitle:@"title text"];
...
[bar pushNavigationItem:item animated:YES];
[item release];

Mã này đã hoạt động.


Chào mừng đến với SO và cảm ơn cho bài viết. Tốt hơn hết bạn nên đăng thông tin này dưới dạng nhận xét, vui lòng xem Cách trả lời để biết thêm thông tin.
Serge Belov

2

Nếu bạn đang làm việc với Bảng phân cảnh, bạn có thể nhấp vào bộ điều khiển, chuyển sang tab thuộc tính và đặt văn bản tiêu đề ở đó.


1

Tôi đoán bạn cần một tiêu đề động, đó là lý do tại sao bạn không đặt nó trong IB.

Và tôi cho rằng đối tượng viewController của bạn là đối tượng được chỉ định trong NIB?

Có lẽ đang thử đặt nó thành giá trị giả trong IB và sau đó gỡ lỗi các phương thức để xem bộ điều khiển nào có giá trị giả - giả sử nó xuất hiện dưới dạng tiêu đề ...


1

Từ bên trong TableViewController.m của bạn:

self.navigationController.navigationBar.topItem.title = @ "Blah blah Một số tiêu đề tuyệt vời";


1

Đối với tất cả các Swift-ers của bạn ngoài kia, điều này hoàn toàn phù hợp với tôi. Đây cũng là một trong những cách ngắn hơn để hoàn thành việc đặt tiêu đề:

override public func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
  if segue.identifier == "presentLineItem" {
    print("Setting Title")
    var vc = segue.destinationViewController as! LineItemsTableViewController
    vc.navigationItem.title = "Line Item"
  }
}
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.