2010-06-12 22 views
6

Tôi muốn phân lớp UINavigationController để có thêm tự do liên quan đến sự xuất hiện của bộ điều khiển.Các bước trong phân lớp UINavigationController

Tôi có một số đồ họa cho các phần, thanh, nút, văn bản khác nhau, v.v. Nhìn vào tệp tiêu đề UINavigationController Tôi nhận được rất ít trợ giúp, tôi không biết bắt đầu từ đâu.

Tôi chưa bao giờ phân lớp/ghi đè thành phần UIKit trước đây, có vẻ như nó giống như chơi Sherlock Holmes.

Cách tiếp cận là gì?

Làm cách nào để biết ghi đè để lấy một phần đồ họa cụ thể "được tiêm" vào đúng vị trí?

Tôi có cần phân lớp UINavigationBar, UIBarButtonItem v.v ... để có giao diện được tùy chỉnh hoàn chỉnh không?

Làm cách nào để biết liệu có điều gì đó bị hạn chế liên quan đến việc được Apple phê duyệt hay không?

Hy vọng ai đó có thể chỉ cho tôi đúng hướng, tôi chỉ có thể tìm thấy ví dụ về việc thay đổi các bộ phận nhỏ của bộ điều khiển, chứ không phải tùy chỉnh đầy đủ theo phân lớp. Tôi có đi sai đường không?

Xin cảm ơn :)

+0

Đối với những gì nó có giá trị, có thể bạn sẽ làm tốt hơn để viết một bộ điều khiển việc duyệt thông thường từ mặt đất lên. – zoul

Trả lời

8

Bạn KHÔNG nên mở rộng UINavigationController.

Kể từ iOS 6, thông tin này đã lỗi thời. Từ tài liệu Xcode 5: Bạn thường sử dụng lớp này như hiện tại nhưng trong iOS 6 trở lên, bạn có thể phân lớp để tùy chỉnh hành vi của lớp.

thông tin lỗi thời gốc sau:

Từ các tài liệu:

Lớp UINavigationController thực hiện một bộ điều khiển xem chuyên quản lý điều hướng nội dung phân cấp. Lớp này không dành cho lớp con. Thay vào đó, bạn sử dụng các trường hợp như trong trường hợp bạn muốn giao diện người dùng của ứng dụng phản ánh bản chất phân cấp của nội dung của bạn.

Bạn có thể muốn xem xét việc tạo danh mục hoặc phân lớp UINavigationBar của bạn và có khả năng tạo UIButtons tùy chỉnh mà bạn sử dụng để tạo UIBarButtonItems.

Bất cứ khi nào bạn đối phó với một thành phần giao diện người dùng kéo dài từ UIView những gì bạn nên xem xét việc làm là subclassing và trọng

- (void)drawRect:(CGRect)rect 

Có rất nhiều ví dụ ở đây trên stackoverflow hoặc trên trang web tài liệu chính thức của Apple.

+0

Xin chào Cảm ơn, tôi có thể thấy rằng khi tìm kiếm cách ghi đè có rất nhiều kết quả, nhưng rất ít và không có kết quả tốt khi tìm kiếm phân lớp. Tôi đã làm một loại trong UINavigationBar, điều này thay đổi nền, Tôi sẽ phải làm điều này cho UINavigationController, UIBarButtonItem etc.etc. để thay đổi các nút và phông chữ? – RickiG

+0

Xin chào Ricki, 1. Không mở rộng UINavigationController, cũng như UIBarButtonItem. 2. Khi tạo UIBarButtonItem, sử dụng initital with initWithCustomView, nó sẽ cho phép bạn chuẩn bị và sử dụng bất kỳ khung nhìn nào bạn cần (trong đó bạn có thể vẽ bất kỳ văn bản, font chữ, hình ảnh, vv). Chúc mừng – nicktmro

+0

Cảm ơn Nick :) Sau khi gói gọn nó trong các hạng mục và một lớp tiện ích, tôi thực sự vui vì tôi đã làm cố vấn và không cố gắng tự xây dựng hoặc mở rộng nó. Bây giờ tôi có thể thay đổi titleLabel và background trên navigationBar và sử dụng các nút tùy chỉnh của tôi như là BarButtomItems. – RickiG

52

Bây giờ bạn có thể phân lớp UINavigationController, xem tài liệu cập nhật:

Lớp UINavigationController thực hiện một bộ điều khiển xem chuyên quản lý điều hướng nội dung phân cấp. Giao diện điều hướng này giúp bạn có thể trình bày dữ liệu hiệu quả và cũng giúp người dùng dễ dàng điều hướng nội dung đó hơn. Lớp này thường được sử dụng như là nhưng có thể được phân lớp trong iOS 6 trở lên.

UINavigationController Class Reference

+0

Thực ra tôi nghĩ tốt hơn là chỉ ra thay đổi này trong nhận xét cho câu trả lời được đánh dấu là "đúng". Tôi nghĩ mình sẽ làm ... – bazzilla

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