2010-10-07 27 views
5

Giả sử tôi đã tạo XIB cho chế độ xem biểu tượng. Sau đó, tôi muốn nhúng một số trường hợp của chế độ xem biểu tượng này trong một khung nhìn khác nhau vùng chứa XIB bằng tham chiếu, vì vậy nếu tôi thay đổi thuộc tính/bố cục trong chế độ xem biểu tượng gốc XIB, các trường hợp trong chế độ xem vùng chứa XIB phản ánh những thay đổi này .XIB lồng nhau trong Trình tạo giao diện/nhúng theo tham chiếu

Về cơ bản, nhúng theo tham chiếu.

Có thể tôi đang dày đặc, nhưng có vẻ như hành vi mặc định của Trình tạo giao diện khi kéo chế độ xem vào chế độ xem vùng chứa là sao chép mọi thứ thay vì tham chiếu XIB gốc? Và việc kéo một thể hiện của lớp được liên kết với chế độ xem biểu tượng vào chế độ xem vùng chứa sẽ dẫn đến một chế độ xem trống.

Tôi chắc chắn có cách để thực hiện việc này, nhưng tôi đã chết nếu tôi có thể đoán ra. Tôi thường tránh IB như bệnh dịch hạch;)

Trả lời

5

Không có cách nào để thực hiện việc này trực tiếp trong Trình tạo giao diện. Tôi cần phải làm một cái gì đó tương tự như thế này trong ứng dụng cuối cùng của tôi. Những gì tôi đã kết thúc là chỉ cần đặt một giữ chỗ Xem ở vị trí mà bạn muốn xib tham chiếu của bạn và sau đó trong viewDidLoad của bạn hoặc viewWillAppear, vv, bạn tải xib đó và đặt xem được xem như là một con của viewholder giữ chỗ của bạn.

NSArray *views = [[NSBundle mainBundle] loadNibNamed: @"ReferencedView" owner: self options: nil]; 
UIView *referencedView = (UIView *)[views objectAtIndex:0]; 
[self.viewPlaceholder addSubview:referencedView]; 

Hoặc, bạn có thể tạo IBOutlet trong trình điều khiển chế độ xem để giữ chế độ xem được tham chiếu và kết nối ổ cắm đó trong IB. Nếu bạn làm thế, bạn sẽ không cần phải kéo khung nhìn ra khỏi NSArray.

0

Đây là cách tôi đã thực hiện:

Lưu ý rằng hiện tại trong iOs 5 họ đã có vùng chứa containerView. Đối với tất cả tôi biết nó không hiển thị trong XIB. Tuy nhiên, bản chất là như nhau.

Tạo chế độ xem và gọi là ContainerView. Nếu bạn thực hiện theo kiểu XIB, bạn cần thiết lập một số thứ theo cách thủ công như cấp phát] init con Xem bộ điều khiển, thêm nó vào phần tử cha và thêm khung nhìn vào khung nhìn của cha mẹ.

Nếu bạn làm điều đó trong bảng phân cảnh, bạn có thể liên kết từ khung nhìn đó đến một bộ điều khiển khác và tạo một khoảng cách nhúng. Tuy nhiên, nó chỉ hoạt động cho một bộ điều khiển xem và bạn cần phải tương tự cho phần còn lại.

Sau đó, tôi làm điều này:

- (void)viewDidLoad 
{ 

    [super viewDidLoad]; 

    PO(self.childViewControllers); 
    BGCRListBusinessViewController * theListController= [[BGCRListBusinessViewController alloc]init]; 
    self.listBusinessViewController = theListController; 
    [self addChildViewController:theListController]; 
... 
    for (UIViewController * child in self.childViewControllers) { 
     child.view.frame=self.ContainerView.bounds; 

    } 
    //PO(self.ChangeFilter.BackgroundImage); 
    //PO 
    //self.ChangeFilter setBackgroundImage:[UIImage imageNamed:@] forState:<#(UIControlState)#> 

    [self.ContainerView addSubview:self.listBusinessViewController.view];// initialize' 
} 

Tada ....

Bây giờ nhìn vào đó bộ sưu tập childViewControllers. Đó là một trong những mới trong IOS5. Tất cả những điều đó, là để vượt qua viewWillAppear, viewWillDisappear, ViewDidThisandThat và ViewIamRotatingWillOrDidorWhatever. Nó làm nhiều hơn một chút nhưng tôi không quan tâm.

Vì vậy, nếu bạn nhắm đến IOS4, bạn chỉ có thể gọi trực tiếp tất cả những người đó trong chế độ xem cha mẹWillAppear, viewWillDisappear, ViewDidThisandThat và ViewIamRotatingWillOrDidorWhatever tương ứng.

Trong triển khai của mình, tôi có một con trỏ tới bất kỳ viewController nào có chế độ xem bên trong ContainerView. Các khung nhìn như vậy sẽ nhận được tất cả các hàm ViewWillorDidWhatever được gọi đó.

Bộ điều khiển gốc của tôi cũng có nhiều con. Hầu hết trong số đó không được nhìn thấy. Không vấn đề gì. Trẻ em không được nhìn thấy sẽ không nhận được ViewWillorDidWhatever.

Điều này được thực hiện tự động bởi childViewControllers. Nếu bạn nhắm vào IOS4, hãy xem qua tất cả các con bạn xem chế độ xem của trình điều khiển và xem có bất kỳ hiển thị nào trong số chúng được hiển thị hay không. Nếu được hiển thị, hãy gọi ViewWillorDidWhatever của họ.

Ngoài ra còn có một số đại biểu bổ sung thông báo liệu một đứa trẻ có được thêm vào cha mẹ hay không. Tôi đã không sử dụng nó và không biết những gì nó được sử dụng cho.

Cuối cùng, một số chế độ xem có thể muốn bị loại bỏ. Bố mẹ nên làm điều đó. Tôi thực hiện điều đó bằng thông báo. Nhưng đó là vượt ra ngoài câu hỏi rồi. IOS đã có chức năng như vậy cho modalViewController.

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