2012-11-13 5 views

Trả lời

38

Chế độ xem vùng chứa là chế độ xem mà bạn có thể kéo vào một trong các bộ điều khiển chế độ xem mà bạn đã có trong bảng phân cảnh (chúng tôi sẽ gọi khung nhìn này làControllerA). Bạn sẽ tự động có bộ điều khiển xem được kết nối với chế độ xem này thông qua một khoảng cách nhúng. Bộ điều khiển xem mới này có bộ khung của nó, do đó nó có cùng kích thước với khung nhìn container - nếu bạn thay đổi kích thước khung nhìn vùng chứa, bộ điều khiển cũng sẽ tự động thay đổi kích thước. Vì vậy, nếu bạn muốn, bạn có thể kéo trong nhiều khung nhìn container vào viewControllerA, và mỗi cái sẽ có bộ điều khiển xem riêng của nó. Trong mã, nếu bạn cần truy cập các bộ điều khiển xem nhúng này, chúng có thể được truy cập từ viewControllerA.childViewControllers - nó sẽ cung cấp cho bạn một mảng của bất kỳ bộ điều khiển xem nhúng nào mà bạn có.

Có một cuộc thảo luận về các chế độ xem vùng chứa này trong video về Video phiên của WWDC 2012 được gọi là "Áp dụng bảng phân cảnh trong ứng dụng của bạn".

+0

Đây có phải là điều tương tự như "chứa bộ điều khiển" bằng văn bản lập trình không? – huggie

+2

@huggie, Sử dụng chế độ xem vùng chứa trong IB cung cấp cho bạn cùng một thứ mà bạn nhận được bằng cách sử dụng api bộ điều khiển vùng chứa tùy chỉnh trong mã. – rdelmar

30

Tôi nhầm lẫn rằng tại sao và khi nào chúng tôi cần sử dụng chế độ xem vùng chứa?

Khi mọi người nói về chế độ xem vùng chứa, chúng thường có nghĩa là UIView cũ đơn giản chứa các chế độ xem khác. Sử dụng một khung nhìn theo cách đó cho phép bạn di chuyển tất cả các khung nhìn mà nó chứa thành một nhóm, để các vị trí của chúng tương đối với nhau được duy trì. Nó cũng làm cho nó dễ dàng để ẩn tất cả các quan điểm chứa như một nhóm.

và cách chúng tôi có thể khởi tạo Chế độ xem vùng chứa theo mã?

Cùng theo cách bạn muốn tạo một UIView từ mã thường:

CGRect frame = CGRectMake(someX, someY, someWidth, someHeight); 
UIView *container = [[UIView alloc] initWithFrame:frame]; 

Sau đó, có thể bạn sẽ muốn thêm một số subviews để container, và cuối cùng thêm container như là một subview của chế độ xem của trình điều khiển chế độ xem của bạn.

Ngoài ra, lưu ý rằng chúng ta đang nói về quan điểm và không xem điều khiển đây. Mọi người cũng nói về bộ điều khiển xem bộ chứa, theo đó chúng có nghĩa là bộ điều khiển chế độ xem có thể quản lý các bộ điều khiển chế độ xem khác. UITabBarController, UINavigationController và UISplitViewController là các ví dụ về các bộ điều khiển xem bộ chứa được cung cấp bởi iOS. Bạn có thể tạo của riêng bạn nếu bạn muốn, nhưng đó là một chủ đề cho một câu hỏi khác.

Cập nhật: Từ nhận xét của bạn, dường như bạn đang tự hỏi về mục "Chế độ xem vùng chứa" trong trình chỉnh sửa bảng phân cảnh. Nếu bạn kéo một người vào một chế độ xem, bạn sẽ thấy rằng:

  1. Chế độ xem chính là UIView được sử dụng làm trình giữ chỗ.

  2. Cùng với chế độ xem, trình chỉnh sửa tạo vùng mà bạn có thể chỉnh sửa nội dung sẽ được quản lý bởi bộ điều khiển chế độ xem con. Xem hình bên dưới.

container view in IB

Đây không chỉ là một đối tượng - đó là nhiều. Bạn nhận được một cái nhìn, một bộ điều khiển xem trẻ em, và một 'nhúng' segue. Bạn chắc chắn có thể tự tạo mã và kết nối chúng một cách thích hợp nếu bạn muốn.

+0

Tôi không nghĩ rằng đây là điều mà op đang hỏi. Có một kiểu xem mới có sẵn trong IB (chỉ trong bảng phân cảnh mà tôi nghĩ) có thể chứa bộ điều khiển chế độ xem. Bộ điều khiển xem đó được nối với nhau qua một khoảng cách nhúng. Điều này khác với chế độ xem bình thường và từ bộ điều khiển chế độ xem vùng chứa. Chính xác điều này là gì đằng sau hậu trường, tôi không biết - Tôi không thể tìm thấy bất kỳ tài liệu nào về nó. Tôi cho rằng nó có thể được tạo ra trong mã, nhưng tôi không biết làm thế nào. – rdelmar

+0

@rdelmar, vâng, tôi hỏi về "chế độ xem vùng chứa" có sẵn trong IB. Tôi đang bối rối giữa "chế độ xem vùng chứa" và "chế độ xem" chung. Theo hiểu biết của tôi, khung nhìn cũng có thể chứa các khung nhìn con và các khung nhìn con này cũng có thể được quản lý bởi các bộ điều khiển riêng của chúng. Có thể là sự hiểu biết của tôi là sai, xin vui lòng giúp đỡ để làm rõ. –

+0

@WilliamChoi, hãy xem câu trả lời của tôi. – rdelmar