2012-05-07 8 views
7

initWithNibName trên iOS là thông minh: nó làm những việc như tự động tải NIB khác nhau cho iPad thay vì iPhone (mặc dù rất nhiều người không biết điều này - nó KHÔNG ĐƯỢC TÀI LIỆU trong UIViewController.initWithNibName!).Quy tắc cho tên tệp khớp với initWithNibName là gì?

Nhưng còn có thể làm gì khác? Các tài liệu của Apple duy nhất tôi đã tìm thấy cho điều này giải thích rằng:

  1. Nó sẽ tìm kiếm và tìm các file có ~ ipad hay ~ iphone vào cuối tên
  2. của Apple ngụ ý rằng nó tuân theo quy tắc cho hình ảnh filename tự động phù hợp với

Nhưng không có liên kết đến các quy tắc cho phù hợp với hình ảnh, và tôi không thể tìm thấy bất kỳ tài liệu rõ ràng cho cả hai :(

Nội quy có thể bao gồm:. "bạn nhận được một NIB khác nhau cho võng mạc nếu bạn đặt @ 2x vào cuối tên tệp "(Tôi không có ý tưởng nếu điều này hoạt động).

Điều tôi thực sự tìm kiếm là danh sách các quy tắc được sử dụng. Nó sẽ tiết kiệm rất nhiều mã hóa - lặp đi lặp lại trong hầu hết mọi ứng dụng tôi viết - nếu tôi có thể sử dụng nhiều hơn tên phù hợp thông minh của họ (ví dụ: nếu họ có "nib tải chân dung nib")

+0

Câu hỏi hay!Tôi thậm chí không biết về sự kết hợp '~ iphone' và' ~ ipad', vì Apple dường như không sử dụng điều này trong mã mẫu của riêng họ! Tôi sẽ xem câu hỏi này! – mbm29414

Trả lời

2

To trả lời (chính) câu hỏi của bạn, đó là những quy tắc cho phù hợp với tên tập tin trong initWithNibName:

... Tuy nhiên, nếu bạn không chỉ định một tên nib, và không ghi đè lên các phương pháp loadView trong lớp con tùy chỉnh của bạn, bộ điều khiển xem tìm kiếm cho tệp nib bằng các phương tiện khác. Cụ thể, nó tìm kiếm một tệp nib có tên thích hợp (không có phần mở rộng .nib) và tải tệp nib đó bất cứ khi nào chế độ xem của nó được yêu cầu. Cụ thể, có vẻ (theo thứ tự) cho một tập tin nib với một trong những tên sau:

  1. Nếu tên view controller lớp kết thúc với từ “điều khiển”, như trong MyViewController, nó sẽ cho một tập tin nib có tên khớp với tên lớp không có từ "Bộ điều khiển", như trong MyView.nib.
  2. Tìm kiếm tệp nib có tên khớp với tên của chế độ xem lớp điều khiển. Ví dụ, nếu tên lớp là MyViewController, nó sẽ tìm một tệp MyViewController.nib.

Từ tài liệu UIViewController dưới nibName

Nhưng có được nhiều hơn ... Trên thực tế các NSBundle có một số quy tắc khá thông minh để định vị các nguồn lực bên trong nó. Here is the documentation page describing these rules (xem: Tài nguyên thiết bị cụ thể trong iOS).

Điều này mang lại cho chúng tôi to this page mô tả tất cả các công cụ sửa đổi (và mẫu cơ bản) có thể được áp dụng cho tài nguyên gói (điều này tôi tin là liên kết bạn đang đề cập đến đối sánh tên tệp hình ảnh).

+0

Vì vậy, ... đọc những liên kết ... không có quy tắc cụ thể cho các tập tin NIB? Họ thừa hưởng quy tắc "cơ bản" cho tất cả các tài nguyên (liên kết 1), nhưng không có quy tắc bổ sung (link2) - đúng không? – Adam

+0

Đúng vậy. Một điều nữa tôi có thể thêm là tải thông minh của các tệp nib dựa trên nội địa hóa. Vì đây là một chủ đề thực sự thú vị, bất kỳ ai có thể thêm nhiều thông tin sẽ thực sự được chào đón. – Alladinian