2015-02-16 19 views
7

Điều tôi muốn làm là thêm chế độ xem tùy chỉnh vào số UINavigationBar của UINavigationController của mình nhưng chỉ cho bộ điều khiển chế độ xem hiển thị hiện tại.Thêm chế độ xem con vào UINavigationBar của chế độ xem hiện tại chỉ

Vì vậy, tôi xây dựng subviews của quan điểm tôi muốn thêm vào trong một cái nhìn container và quan điểm này để thanh điều hướng bằng cách nhận một tài liệu tham khảo với:

let navBar = navigationController?.navigationBar as UINavigationBar! 

Kết quả trông như thế này:

enter image description here

Tuy nhiên, khi tôi đẩy một bộ điều khiển xem trong UINavigationController chồng, subview này vẫn tồn tại trong UINavigationBar của viewControllers đẩy cũng như:

01.

enter image description here

cách tốt nhất để thêm subview này chỉ trong hiện quan điểm của tôi UINavigationBar và không có nó tồn tại trên bộ điều khiển xem liên tiếp cũng là gì?

+0

Tôi nghĩ cách tốt nhất là lưu những gì bạn có trong thanh trạng thái vào 'viewWillAppear' và khôi phục chúng trong' viewWillDisappear'. Xin lỗi, tôi không chắc chắn về các đối tác của hai phương pháp này nhanh chóng. Nhưng ý tưởng là như nhau. – Ra1nWarden

+0

Sử dụng UINavigationControllerCác phương thức liên kết sẽShowViewController didShowViewController để thêm và xóa chế độ xem, nó sẽ đơn giản hóa nhiều thứ của bạn. – Sandeep

Trả lời

7

này đang xảy ra trong một vài lý do:

  1. Thêm một subview đến một UINavigationBar là không chính xác không được hỗ trợ, nhưng có thể có thể dẫn đến hành vi kỳ quặc.

  2. Tất cả bộ điều khiển chế độ xem trong UINavigationController chia sẻ cùng một UINavigationBar (đó là lý do tại sao bộ điều khiển chế độ xem mới được đẩy không ảnh hưởng đến chế độ xem phụ của bạn).

Nếu bạn muốn làm điều này đúng, đây là hai giải pháp khả thi:

  1. Sử dụng viewWillAppearviewWillDisappear để thêm/hiển thị và xóa/ẩn subview của bạn khi điều khiển xem lý tưởng của bạn là nhìn thấy được.

  2. titleView sở hữu Sử dụng UINavigationItem 's gán điểm này, ví dụ .:

    // Example code in Obj-C, sorry! 
    myViewController.navigationItem.titleView = [[MySearchView alloc] init]; 
    

    Bằng cách này xem tìm kiếm sẽ là duy nhất với bộ điều khiển xem.

+0

giới hạn của chế độ xem tiêu đề là gì? Nó có thể tạo điều kiện cho một cái nhìn mở rộng gần như đầy đủ chiều rộng như thế này? Điều này nghe có vẻ như là lựa chọn tốt nhất cho tôi. – Thanos

+0

@Thanos Nó sẽ cho phép bạn mở rộng nó đến chiều rộng đầy đủ (miễn là không có các mục bên trái và bên phải). Khi tôi đã thực hiện điều này một lần trước khi tôi có thể đặt khung 'titleView' thành thanh điều hướng đầy đủ mà không có vấn đề gì. – mattsven

3

Tôi nghĩ cách tốt nhất là tránh sử dụng thanh điều hướng. Bạn có thể chỉ cần ẩn thanh điều hướng và tạo của riêng bạn bằng cách sử dụng UIView hoặc UIImage (có thể UIVisualEffectView cho blur trong iOS 8), sau đó thêm các nút để điều khiển xem pop (quay lại) vv, và bạn sẽ có nhiều kiểm soát hơn.

Lưu ý rằng bạn vẫn sẽ nhúng trong bộ điều khiển điều hướng để mọi thứ hoạt động trơn tru.

+0

Đó là loại tái phát minh bánh xe cho trường hợp của OP. – mattsven

+1

Tôi từng có một UINavigationBar tùy chỉnh trong một thời gian nhưng nó làm cho cuộc sống của tôi khó khăn hơn với những thứ quan trọng khác hơn thế này. Giống như @mattsven vui lòng nhận xét, nó cảm thấy như liên tục cố gắng để chống lại khuôn khổ. – Thanos

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