2009-11-17 29 views
9

Tôi sẽ cố gắng thực hiện việc này càng ngắn càng tốt.Các lớp tùy chỉnh lồng ghép/XIB với bộ dựng giao diện

Tôi đã viết một lớp tùy chỉnh mở rộng UIView với một vài thuộc tính IBOutlet, và nó có một XIB liên kết với nó, nơi những IBOutlets được liên kết đến.

Sau đó tôi muốn tham gia lớp học đó, nhúng nó vào một số XIB khác (ví dụ: ô bảng) và chỉ hoạt động.

Có vẻ như khi tôi nhúng lớp tùy chỉnh đó vào XIB mới, nó không nhận ra XIB gốc tôi liên kết với nó, vì vậy nó yêu cầu tôi đặt lại IBOutlets để giao diện các phần tử trên XIB mới. Cái này thật dở.

Có ai hiểu tôi đang cố gắng làm gì và có cách tiếp cận tốt không?

Trả lời

8

Đây là cách tôi quản lý để làm cho công việc này:

Trong Interface Builder
Mở ngòi bên ngoài của bạn và thực hiện điều này:

  • Thêm một UIView để xác định không gian nơi bạn muốn của bạn nib bên trong để hiển thị.
  • Thêm đối tượng UIViewController từ thư viện, đặt thuộc tính Nib Name của nó thành tên tệp nib bên trong của bạn (không có phần mở rộng).
  • Tạo IBOutlets cho hai mục này trong bộ điều khiển chế độ xem bên ngoài của bạn và nối chúng lên. (Tôi sẽ đề cập đến chúng như innerViewinnerViewController.)
  • Không kết nối bất kỳ IBOutlets quy định tại điều khiển xem bên trong của bạn để bất cứ điều gì trong tập tin nib bên ngoài của bạn, chỉ cần để chúng không có liên quan.

Trong Xcode
Trong viewDidLoad phương pháp xem bộ điều khiển bên ngoài của bạn, thêm hai dòng sau:

[self.innerView addSubview:self.innerViewController.view]; 
self.innerViewController.view.frame = CGRectMake(0, 0, self.innerView.frame.size.width, self.innerView.frame.size.height); 

Nếu ngòi bên ngoài của bạn là một phong tục UITableViewCell, đặt những dòng trong awakeFromNib của bạn Thay vào đó, hãy sử dụng phương thức.

Xây dựng & Chạy!

+0

Nó hoạt động theo cùng một cách trên OS X, chỉ cần thay thế các lớp UI với các đối tác NS của chúng. – Mark

1

Tôi giả sử bạn chỉ đơn giản là đặt UIViews vào một ngòi ngách để sử dụng bởi UIViewController hoàn toàn là mã. Apple gọi đây là số detached nib file.

Làm theo hướng dẫn mà tôi đã liên kết để biết chi tiết và ví dụ về cách làm việc này.

Về việc nhúng chế độ xem bên trong chế độ xem khác trong Trình tạo giao diện, bạn cần phải add a UIView element from the Library vào chế độ xem gốc và set its class in the Inspector. Khi lớp của chế độ xem được nhúng được đặt, IBOutlets của bạn sẽ hiển thị.

+1

Câu đầu tiên đó không phải là những gì tôi đang làm. Bản thân lớp này là UIView và chứa UIImageView và UIActivityIndicator. Câu cuối cùng là đúng, nhưng tiếc là nó không hoạt động chính xác. Nó khởi động các IBOutlets. –

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