2015-11-14 29 views
15

Tôi đang cố đặt tiêu đề Navigation Bar trong Swift, tôi đặt Tab Bar và trong Navigation Bar không có gì hiển thị, không có nút, không có tiêu đề, không có gì. Tôi đã sử dụng một số mã nhưng không hoạt động khi tôi sử dụng Tab Bar và khi tôi xóa Tab Bar, mã đang hoạt động và mọi thứ đều ổn với Navigation Bar, tiêu đề đang hiển thị và các nút đang hiển thị.Làm cách nào để đặt tiêu đề của Thanh Điều hướng trong Swift?

Mã mà tôi sử dụng cho tiêu đề là:

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.navigationItem.title = "My Title" 

} 

Và trong Main.storyboard tôi kết nối với Navigation ControllerTab Bar Controller, như trong bức tranh.

enter image description here

Vì vậy, cách khắc phục điều này? Vấn đề là Navigation Bar không hoạt động khi đang sử dụng Tab Bar.

+1

Bạn có bộ điều khiển điều hướng và thanh điều khiển thanh tab sai cách. Thanh tab phải là gốc. Sau đó, mỗi tab phải có bộ điều khiển điều hướng. Điều này sẽ cung cấp cho bạn các điều khiển tiêu chuẩn đi kèm với thanh tab và đặt tiêu đề sẽ dễ dàng hơn. – Fogmeister

+1

Khi kết hợp bộ điều khiển thanh tab và bộ điều khiển điều hướng, bộ điều khiển gốc phải là bộ điều khiển thanh tab và mỗi tab phải có bộ điều khiển điều hướng riêng. Xem http: // stackoverflow.com/a/26153273/1630618 – vacawama

Trả lời

20

Kể từ khi Tab Bar thực sự là Root View Controller của Navigation Bar, bạn cần phải đặt 'title' thay vì trong chức năng viewWillAppear để nó xảy ra mỗi khi bạn chuyển đổi tab:

override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(animated) 
    self.tabBarController?.navigationItem.title = "My Title" 
    self.tabBarController?.navigationItem.leftBarButtonItem = settingsButton //This is the IBOutlet variable that you previously added 
} 

Nhưng một cách tốt hơn để làm điều đó thực sự sẽ là để có nó theo cách khác xung quanh, như vậy

Correct view hierarchy

Bạn nên treo lên một UINavigationController cho mỗi đứa trẻ của UITabBarController, vì nó là chính xác hơn ngữ nghĩa và đơn giản hơn để duy trì.

+0

Và làm thế nào về các nút? – Emm

+1

Tạo một 'IBOutlet' cho mỗi nút và sử dụng mã mà tôi sẽ cập nhật câu trả lời của mình với – kabiroberai

+1

@EminEmini Tôi vừa cập nhật câu trả lời của mình. – kabiroberai

9

Câu hỏi của bạn không rõ ràng, nếu mã bạn trình bày là từ UIViewController mà được giữ bên trong UINavigationControllernavigationBar được hiển thị bạn chỉ có thể sử dụng:

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.title = "My Title" 
} 
1

Trong UINavigationController Lớp Reference của Apple viết này:

init (rootViewController: UIViewController)
thông số rootViewController
Quan điểm điều khiển mà nằm ở dưới cùng của menu ngăn xếp. Đối tượng này không thể là một thể hiện của lớp UITabBarController.

Nhưng bạn có thể làm điều đó nếu bạn nhấn mạnh. Nhưng trong trường hợp này, ViewControllers of tabbarController của bạn tất cả cùng một tiêu đề, đó là tiêu đề của tabbarController.

Cách tốt hơn để thực hiện việc này là cung cấp cho mỗi chế độ xem của tabbarController là một NavigationViewController.

Các vấn đề liên quan