2010-09-22 30 views
6

Tôi đã xem API cho Lập trình IOS và đã đọc về bộ điều khiển chế độ xem và UIViews. Có vẻ như lớp con UIViewController thực sự hữu ích cho điều hướng Modal và hoạt ảnh tùy chỉnh, nhưng tôi không thể thấy bất kỳ mục đích nào khác.Khi nào tôi nên sử dụng UIViewController trong Lập trình IOS?

Lợi ích của việc sử dụng lớp con UIViewController thay vì lớp con NSObject bình thường là gì?

Tại sao

@interface MyViewController : UIViewController { 
} 

-(void)handleEvent; 

@end 

Thay vì chỉ

@interface MyViewController : NSObject { 
    UIView* view; 
} 

@property(retain) UIView* view; 
-(void)handleEvent; 

@end 

Bạn không chỉ cần kết thúc việc thêm chỉ là cái nhìn về phía cửa sổ, không phải là thực tế viewController bản thân? Đối với hầu hết các mục đích, không phải tất cả các chức năng bạn cần được đóng gói trong đối tượng UIView? Bạn chỉ cần kết thúc thêm nó như thế này:

[window addSubview:myViewControllerInstance.view] 

Có sử dụng cho UIViewController khác hơn được xây dựng trong chức năng giống như phương thức Navigation?

Cảm ơn.

(Xin lỗi nếu điều này là một câu hỏi ngu ngốc, tôi đã được học tập này trong 2 ngày nay)

Trả lời

2

Ca cao trên Mac OS và iOS sử dụng nhiều mẫu Model-View-Controller (MVC). Theo mô hình MVC, UIViewController là một lớp Controller. Công việc của nó là phối hợp tương tác giữa giao diện người dùng của bạn (Xem đối tượng) và dữ liệu ứng dụng của bạn (đối tượng Model). Về cơ bản, Bộ điều khiển chủ yếu là nơi bạn đặt logic của ứng dụng. Nó xử lý các sự kiện và các cuộc gọi theo quan điểm và mô hình cho phù hợp.

Xem UIViewController reference, có tổng quan tốt đẹp về lớp học.

Bằng cách bắt nguồn từ UIViewController, bạn nhận được một loạt chức năng điều khiển miễn phí, chẳng hạn như tải chế độ xem từ tệp Nib (initWithNibName: bundle :) và trả lời các sự kiện liên quan đến chế độ xem (viewWillAppear :, viewWillDisappear :). Ngoài ra, UIViewController chính nó là một phân lớp của UIResponder, trong đó có chức năng để xử lý các sự kiện chạm (touchesBegan: withEvent, touchesMoved: withEvent, touchesEnded: withEvent).

Về cơ bản, không có lý do gì để KHÔNG sử dụng UIViewController với tất cả chức năng mà nó cung cấp. Ngay cả khi bạn có thể xoay xở để làm như vậy, nó sẽ là cách làm việc nhiều hơn, vì không có lợi ích thực sự.

+1

Điều này, ở hầu hết các kiến ​​trúc Model-View-Controller mà tôi đã sử dụng hoặc phát triển, bộ điều khiển hoàn toàn độc lập với chế độ xem. Những "bộ điều khiển xem" khuyến khích khớp nối chặt chẽ như vậy giữa khung nhìn và bộ điều khiển - tôi có nên tạo một lớp điều khiển lớn hơn để giao tiếp giữa các bộ điều khiển xem riêng lẻ và mô hình không? – user434565

+0

Mẫu MVC không tách Bộ điều khiển bằng Chế độ xem. Nếu bạn nhìn vào biểu đồ MVC, bạn sẽ thấy rằng trên thực tế, phần Bộ điều khiển trực tiếp xử lý cả Mô hình và Chế độ xem. Một 'UIViewController' đã chăm sóc cho bạn hầu hết các" kiểm soát "của" xem ". –

+0

Tại sao không có lớp 'Mô hình' vào phân lớp? –

0

Hãy nhìn vào các thuộc tính và phương pháp thể hiện của các lớp UIViewController, mà bạn sẽ không nhận được miễn phí nếu bạn chỉ cần phân lớp NSObject. Có rất nhiều thứ trong đó bạn sẽ sử dụng trong tất cả các ứng dụng của bạn.

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