2012-01-26 35 views
17

Ive được xé tóc của tôi ra trong mấy ngày vừa qua cố gắng tìm hiểu cái này dường như khái niệm cơ bản của sự phát triển iOS:Hiểu View Controller làm tổ trong iOS

  • Nếu tôi muốn có hai hoặc nhiều Xem Bộ xử lý hiển thị và có thể sử dụng trong cùng một "lần trên màn hình", là thế này:

    1. tôi không khuyến khích theo "Một VC mỗi lần trên màn hình của nội dung" của Apple
    2. hoàn toàn có thể bằng cách thêm của thông qua mã
    3. VC
    4. Chưa xong. Thay vào đó, hãy sử dụng một VC và chỉ cần thêm mã bắt chước chức năng của bộ điều khiển chế độ xem mà bạn muốn.

Hãy để tôi nói lại một chút:

Nếu tôi muốn có, trong một ứng dụng iPad, một UIView (A) mà chiếm một phần lớn ở phía bên trái của màn hình, và một giây thứ hai UIView (B) chiếm phần còn lại của màn hình và tôi muốn thêm một nút vào UIView B khi được nhấp sẽ sử dụng chuyển đổi Modal để trượt lên UITableview để thay thế UIView B và UITableview này sau đó sẽ hoạt động như một điển hình UITableviewController theo đó khi người dùng chọn một mục từ bảng, các sự kiện điển hình được gửi với bộ điều khiển xem bảng để đẩy vào một bộ mục mới, điều này có khả thi không? Nó chỉ dường như với tôi rằng nếu Im đã có thể dễ dàng tạo ra hai UIViewControllers riêng biệt, và có một nút trong VC một cách đơn giản mang lại VC thứ hai, tại sao tôi không thể kết hợp chức năng này để VC có hai VC trẻ em, và những đứa trẻ đó VC xử lý các chuyển đổi phương thức của riêng họ. Hoặc là cách thực hành tốt nhất trong một trường hợp như thế này chỉ đơn giản là có một VC xử lý mọi thứ và sau đó xử lý thủ công các trang trình bày trong/ra các chế độ xem khác nhau sau các lần nhấp khác nhau trên các phần tử giao diện người dùng khác nhau không? Không.

Như bạn có thể nói, tôi nghĩ rằng tôi đã đọc quá nhiều câu trả lời khác nhau, mâu thuẫn với các câu hỏi tương tự như thế này mà tôi hoàn toàn nhầm lẫn về những gì nữa. Nếu bất cứ ai ra có hiểu những gì Im nhận được và có thể cho vay một lời giải thích giúp đỡ hoặc một số con trỏ Id rất nhiều đánh giá cao nó.

+0

Bạn đã tìm thấy một cách tốt để làm điều này trong iOS 5? Vấn đề tôi muốn giải quyết được xác định rõ trong tài liệu tham khảo của bạn http://www.tumblr.com/tagged/child-view-controller. Nó chắc chắn sẽ được tốt đẹp để làm tổ các phần khác nhau bên trong một cái nhìn tổng thể để giữ cho cái nhìn tổng thể từ trở thành mã nặng. – mm2001

Trả lời

2

Hướng dẫn lập trình điều khiển chế độ xem bao gồm điều này khá tốt.

Trình điều khiển chế độ xem quản lý một tập hợp các chế độ xem. Bạn có thể có bộ điều khiển xem nội dung và bộ điều khiển chế độ xem/điều hướng xem quản lý cấu trúc phân cấp của bộ điều khiển chế độ xem (ví dụ: bộ điều khiển chế độ xem điều hướng có thể quản lý bộ điều khiển danh sách và bộ điều khiển chi tiết).

Nó trình bày chi tiết hơn ở đây:

http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/Introduction/Introduction.html#//apple_ref/doc/uid/TP40007457

Một bộ điều khiển xem quản lý một phần rời rạc của giao diện người dùng ứng dụng của bạn. Theo yêu cầu, nó cung cấp một cái nhìn có thể được hiển thị hoặc tương tác với. Thông thường, chế độ xem này là chế độ xem gốc cho một cấu trúc phân cấp phức tạp hơn gồm các nút, nút chuyển và người dùng khác với các triển khai hiện có trong iOS.Bộ điều khiển xem đóng vai trò là tác nhân điều phối trung tâm cho chế độ xem này phân cấp, xử lý trao đổi giữa các chế độ xem và bất kỳ đối tượng dữ liệu hoặc đối tượng nào có liên quan.

Nhiều bộ điều khiển chế độ xem phối hợp các nỗ lực của họ để trình bày một giao diện người dùng thống nhất .

+0

Liên kết đã chết. – hnh

11

Câu trả lời tùy thuộc vào việc bạn có cần hỗ trợ iOS 4 hay không. Nếu có, câu trả lời là:

Trả lời số 1 - Ngoại trừ bộ điều khiển vùng chứa của Apple, đáng chú ý là UITabBarController, UINavigationController, UISplitViewController, UIPageViewController và UIPopoverController (tôi có bỏ lỡ bất kỳ không?) Không có cách nào được hỗ trợ đúng cách để có nhiều xem bộ điều khiển hoạt động trên cùng một màn hình, quản lý các phần khác nhau của chế độ xem. Xem các phương thức điều khiển như presentModalViewController, vv tất cả hoạt động trên giả định rằng có một bộ điều khiển xem "phía trước" duy nhất sở hữu toàn bộ màn hình, và nếu bạn cố gắng có nhiều bộ điều khiển xem quản lý các phần khác nhau của khung nhìn, mọi thứ sẽ ngắt, chẳng hạn như chuyển tiếp các sự kiện xoay màn hình và thay đổi kích thước/định vị các chế độ xem sau khi chuyển đổi trang.

Tuy nhiên, nếu bạn chỉ cần hỗ trợ iOS 5, câu trả lời là:

Trả lời số 2 - Không sao cả! Chỉ cần đảm bảo rằng tất cả các bộ điều khiển xem trang con của bạn được nối chính xác với bộ điều khiển chế độ xem chính quản lý toàn bộ trang. Điều đó có nghĩa là ngoài các khung nhìn của các trình điều khiển là các bản xem con của một khung nhìn chung, các bộ điều khiển phải là các bộ điều khiển con của một bộ điều khiển cha mẹ chung. Miễn là các thuộc tính parentViewController của bộ điều khiển được thiết lập chính xác, bạn sẽ có thể quản lý loại giao diện hỗn hợp này mà không gặp rắc rối quá nhiều.

Thật không may, Apple chỉ thêm các bộ định cư công khai cho childViewControllers và parentViewControllers trong iOS5. Trong iOS4 và trước đó bạn bị giới hạn đối với sắp xếp bộ điều khiển vùng chứa của Apple và không thể tạo các điều khiển của riêng mình (ít nhất, không phải không có sự cố chuyển tiếp sự kiện).

Giả sử bạn cần hỗ trợ iOS4 ngay bây giờ, câu trả lời số 3 có vẻ giống như đặt cược tốt nhất của bạn: Xây dựng giao diện của bạn bằng nhiều chế độ xem nhưng một bộ điều khiển duy nhất. Đây không phải là quá xấu mặc dù. Bạn có thể tạo các lớp con xem tùy chỉnh quản lý các phần phụ của người thừa kế (ví dụ, không có quy tắc nào nói rằng một tableViewDataSource hoặc đại biểu phải là một lớp con UIViewController hoặc một nút IBAction phải là một phương thức trên một bộ điều khiển khung nhìn thay vì một khung nhìn khác). Bạn thực sự thấy rằng hầu hết các chức năng mà bạn thường xây dựng thành bộ điều khiển chế độ xem có thể được tích hợp vào chế độ xem vùng chứa "thông minh" thay thế, cho phép bạn chia màn hình thành nhiều "chế độ xem bộ điều khiển" độc lập khác nhau nội dung riêng.

Chỉ một chút khó khăn là thực hiện các công cụ như chuyển đổi giữa một chế độ xem và lượt xem tiếp theo. Đối với điều này, bạn sẽ không thể sử dụng các phương thức currentModalViewController hoặc pushViewController tiêu chuẩn, bạn sẽ phải tự làm các hoạt ảnh bằng cách sử dụng các hoạt ảnh CATransitions hoặc UIView.

+0

Có, tôi đã xem video WWDC thảo luận về cách các bộ điều khiển xem có thể có bộ điều khiển chế độ xem cha và con, tuy nhiên như với hầu hết các video WWDC, chúng có xu hướng lướt qua một số chi tiết ở đây và ở đó. Điều này là hữu ích mặc dù. Có thể thực hiện điều này thông qua IB không? Khó khăn như tôi cố gắng tôi không thể dường như tìm ra cách để có hai VC trong cùng một màn hình thông qua IB, nó luôn luôn tạo ra một màn hình mới cho mỗi VC tôi kéo ra ngoài. –

+1

Ive tìm thấy trang web này với một số giải thích tốt hơn về chủ đề: http://www.tumblr.com/tagged/child-view-controller, mặc dù nó giải thích rằng bạn phải thêm childViewControllers lập trình và cũng định vị chúng theo lập trình. Tôi đã hy vọng sẽ có một cách tiếp cận để thêm và định vị các bộ điều khiển này thông qua IB, nếu có ai biết. –

+1

Tôi không nghĩ rằng bạn có thể làm điều đó trong IB. Những gì bạn có thể làm là đặt kích thước của chế độ xem gốc của trình điều khiển chế độ xem của bạn bằng IB bằng cách đặt thanh trạng thái thành "none", điều này sẽ hủy vô hiệu hóa các điều khiển chiều rộng/chiều cao trong trình kiểm tra. Sau đó, bạn có thể thiết kế bố cục cho mỗi chế độ xem phụ trong IB, dưới dạng các ngòi riêng biệt và sau đó chỉ dán các bộ điều khiển xem cùng nhau trong mã, điều này không quá tệ nếu bạn chỉ có một hoặc hai màn hình. –

3

Đây là dứt khoát có thể trong IOS 4:

Bạn có một bộ điều khiển xem "A" với quan điểm của mình:

  • Alloc init quan điểm điều khiển "B" mà bạn muốn có trên bộ điều khiển xem của bạn "A"
  • Chế độ xem cuộc gọi (void) addSubview: (UIView *) trên chế độ xem của bộ điều khiển chế độ xem "A" với chế độ xem của bộ điều khiển chế độ xem "B" làm tham số
  • Khung chế độ xem bộ điều khiển "B" được đặt thành chế độ toàn màn hình vì addSubView, vì vậy hãy thay đổi để đặt chế độ xem nơi bạn muốn trên chế độ xem của bộ điều khiển chế độ xem "A".
  • Thêm một số hoạt ảnh UIView khi bạn thay đổi khung để có màn hình hiển thị tốt.

On IOS5 chỉ cần sử dụng phương pháp này trên bộ điều khiển tầm nhìn của bạn "A":

  • (void) addChildViewController: (UIViewController *) childController
Các vấn đề liên quan