2010-07-21 34 views
6

Tôi hiện đang có một ứng dụng iPhone đơn giản tải một lớp con tùy chỉnh của UIView. Chỉ có một bộ điều khiển tại thời điểm này cho toàn bộ ứng dụng, mặc dù có một số UIViews để tách chương trình một cách hợp lý.Tùy chỉnh các phương pháp hay nhất về UIView và UIViewController?

cấu trúc hiện tại của tôi trông giống như sau:

mainView : UIScrollView 
    \__ has one subView : myCustomUIView : UIView 
      \__ has many subSubView : myOtherCustomUIView : UIView 

Tôi hy vọng điều này là rõ ràng; một dấu hai chấm, tất nhiên, đại diện cho thừa kế.

Vấn đề của tôi là: Tôi cần chặn các sự kiện ở cấp thấp nhất, subSubView. Tôi có thể có thể làm điều này trong bộ điều khiển ứng dụng nếu tôi cần, nhưng tôi nên có một subSubViewController thay thế? Tôi có nên có một subViewController quá?

Nếu có, ai đó có thể chỉ cho tôi một số tham chiếu để thực hiện việc này bằng tay không? Tất nhiên tôi có thể tạo ra các lớp, nhưng việc kết nối chúng với các khung nhìn tùy chỉnh có vẻ không có gì đáng kể. Tôi không sử dụng trình xây dựng giao diện ở tất cả ngoại trừ ngòi chính nắm giữ đối tượng cửa sổ.

Sự nhầm lẫn chính của tôi nảy sinh từ những gì sẽ xảy ra khi tôi có chế độ xem được lồng trong chế độ xem với bộ điều khiển khác. Vì vậy, hãy nói rằng tôi đã có một subSubViewController, nhưng mainView vẫn có mainViewController của nó. Vì subSubView được chứa trong mainView, điều này sẽ không gây ra một số vấn đề?

Và tôi có nên sử dụng đại biểu cho tất cả điều này không?

Bất kỳ di chuyển nào theo đúng hướng sẽ được đánh giá cao.

Trả lời

10

Chế độ xem và xem bộ điều khiển tồn tại theo cặp. Mỗi bộ điều khiển chế độ xem sẽ kiểm soát chế độ xem và các bản xem phụ của chế độ xem. Điều này là cần thiết vì bộ điều khiển xem nằm trong chuỗi trả lời cho các sự kiện. Nếu nhiều bộ điều khiển xem đang hoạt động trong cùng một chế độ xem, chuỗi phản hồi sẽ bị xáo trộn.

Bộ điều khiển chế độ xem chuẩn không có thuộc tính subController và không hiểu liệu bộ điều khiển khác có đang hoạt động trong cùng một chuỗi hay không. Các bộ điều khiển thanh điều hướng và tabbar tồn tại chính xác để xử lý các bộ điều khiển phân cấp. Tuy nhiên, họ làm như vậy bằng cách hoán đổi một cặp view/view-controller cho cái khác. Bạn không thể sử dụng trình điều khiển thanh điều hướng hoặc tabbar để cung cấp các bộ điều khiển khác nhau cho các bản xem trước.

Vì vậy, bất kể bạn có thể xem bao nhiêu lượt xem phụ cho mọi người, bạn chỉ có một bộ điều khiển trên mỗi màn hình.

Bạn có thể muốn xem xét lại thiết kế của mình. Nếu các subviews mỗi cần hành vi tùy biến cao, bạn có thể muốn di chuyển chúng đến các khung nhìn riêng lẻ trong một hệ thống phân cấp điều khiển như trong mô hình thiết kế chi tiết chính.

Nếu bạn phải có tất cả các bản xem trước trên cùng một màn hình, thì tôi khuyên bạn nên xem UITableView và UITableViewController xử lý mọi thứ như thế nào. (Bạn có thể chỉ cần sử dụng một tableview sửa đổi.) Một tableview là một scrollview chứa nhiều subviews cho các ô, tiêu đề phần, đầu trang và cuối trang. Nó quản lý điều này bằng cách bẫy các chạm từ bảng nhìn và xác định xem ô nào đã được chạm vào và sau đó thực hiện hành động thích hợp.

Nếu bạn cần hành vi được tùy chỉnh cao cho từng chế độ xem phụ, bạn có thể sử dụng mẫu đại biểu và gán từng chế độ xem phụ một đối tượng đại biểu khác. Quan điểm có thể bẫy những cái chạm của riêng nó và gọi cho đại biểu của chính nó.

Các bản xem trước có thể phức tạp để thực hiện hành vi chạm tùy chỉnh do bẫy cuộn chạm chạm ở mức cao hơn các chế độ xem khác để có thể xác định xem có cần cuộn hay không.

+0

Chính xác những gì tôi cần biết, cảm ơn bạn. –

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