2009-09-19 26 views
11

Tôi có một ứng dụng có 2 màn hình (MainViewController và AboutViewController). Khi người dùng nhấp vào một nút, tôi muốn tải màn hình AboutViewController, được định nghĩa trong XIB khác.Làm thế nào để tải XIB?

Dường như đơn giản, nhưng dường như tôi không thể tìm thấy Google-fu của mình hôm nay. Làm cách nào để tôi tắt tính năng này?

Trả lời

30

Khi bạn gọi [AboutViewController init], nó sẽ gọi một số hình thức [super init], mà là một từ đồng nghĩa với [UIViewController init]. Khi điều này xảy ra, bộ điều khiển chế độ xem của bạn sẽ tự động tìm kiếm tệp nib được gọi là (trong trường hợp của bạn) AboutViewController.xib. Nếu nó tìm thấy tập tin đó, nó tải nội dung của nó vào bộ điều khiển xem của bạn cho bạn.

Vì vậy, về cơ bản, tất cả những gì bạn cần làm là khởi chạy trình điều khiển chế độ xem của bạn và đảm bảo nó có cùng tên với tệp nib được liên kết.

Nếu bạn muốn tải tệp nib có tên khác vào bộ điều khiển chế độ xem của mình, bạn có thể gọi một cách rõ ràng initWithNibName:bundle: với tên của bất kỳ tệp nib nào bạn thích.

Nếu init chuẩn (với cùng một tệp nib) không hoạt động cho bạn, có một vài điều bạn có thể kiểm tra.

  • chính tả của tên lớp cũng giống như cách đánh vần (và trường hợp) của tập tin nib
  • các tập tin nib được bao gồm trong dự án, và không chỉ ngồi trong cùng thư mục
  • của bạn phương thức init UIViewController lớp con của không cũng gọi [super init]
  • bạn đang gọi phương pháp init UIViewController lớp con của bạn
  • bạn đang thực sự làm cho quan điểm điều khiển quan điểm của bạn có thể nhìn thấy
+4

tôi không có XIBs ý tưởng đã được tự động tải như thế này. Cảm ơn! – DOOManiac

0

NSBundle loadNibNamed:

11

Với màn hình Giới thiệu, bạn có thể chỉ muốn hiển thị một chế độ xem và sau đó loại bỏ nó. Vì vậy, thay vì sử dụng một bộ điều khiển xem hoàn toàn mới, bạn chỉ có thể bao gồm chế độ xem hiện tại.

Giả sử bạn có một Ivar

UIView *aboutUsView; 

với chiếm đoạt tài sản.

Trong điều khiển xem bạn làm:

[[NSBundle mainBundle] loadNibNamed:@"AboutUsView" owner:self options:nil]; // Retains top level items 
[self.view addSubview:aboutUsView]; // Retains the view 
[aboutUsView release]; 

Để loại bỏ các quan điểm, nói trong một hành động kết nối với một nút trên xem, làm:

[aboutUsView removeFromSuperview], aboutUsView = nil; // Releases the view 
+0

Ông đặc biệt nói rằng ông đã có hai bộ điều khiển xem, "MainViewController và AboutViewController" không phải là một bộ điều khiển xem và xem. – mahboudz

+5

Chính xác. Và tôi đặc biệt nói rằng anh ấy có thể không cần cả hai người trong số họ để đáp ứng mục tiêu đã nêu của anh ấy. –

+0

Điều này có vẻ là phương pháp hiển nhiên. – user1432813

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