2009-03-08 21 views
11

Ai đó có thể giải thích cho tôi những ưu điểm của UITableViewController trên UITableView. Nói chung tôi sử dụng bộ điều khiển nhưng xem bảng cơ bản có vẻ rất linh hoạt hơn.UITableView vs. UITableViewController

Trả lời

6

Tôi không nghĩ rằng bạn hiểu câu hỏi của riêng bạn.

UITableViewController là bộ điều khiển .

UITableView là chế độ xem .

Một không phải là tốt hơn so với loại kia, chúng là các đối tượng hoàn toàn khác nhau, được sử dụng cho những thứ hoàn toàn khác nhau.

Tôi sẽ dành một chút thời gian để tìm hiểu mô hình Mẫu-Chế độ xem-Điều khiển để thu hút sự chú ý của Cocoa và SDK iPhone.

The Model-View-Controller Design Pattern

+9

Tôi không chắc chắn OP có ý nghĩa hay không, nhưng tôi có câu hỏi tương tự với ý nghĩa: lợi ích/nhược điểm khi sử dụng UITableViewController vs. UIViewController có chứa UITableView ? – Bogatyr

+13

Tôi đang bỏ phiếu cho câu trả lời của bạn vì đó là câu hỏi của anh ấy. Của tôi cũng thế. Ai đã bỏ phiếu này lên đến 14 ..? Chúng không hoàn toàn khác nhau - chúng có liên quan và do đó câu hỏi là hợp lệ. Khi nào bạn sẽ phân lớp UITableView? Một tableViewController được sử dụng để so sánh với một tableView là gì? Tôi nghĩ rằng tôi biết câu trả lời .. – badweasel

+0

.. nhưng nếu tôi biết rằng tôi biết tôi sẽ không tìm kiếm nó. – badweasel

0

Liên kết ở trên trả về "Không tìm thấy trang". Vì một lý do nào đó, ngay cả khi sửa lỗi link trả về "Không tìm thấy trang" khi được siêu liên kết (có lẽ Apple không cho phép liên kết vào trang web của nhà phát triển của họ).

Để tìm thông tin liên quan, hãy truy cập Kết nối nhà phát triển của Apple (http://developer.apple.com/index.html) và tìm kiếm trên "mẫu thiết kế kiểu xem-bộ điều khiển kiểu cacao".

Trong bảng kết quả, hãy chọn "Nguyên tắc cơ bản về ca cao: Mẫu thiết kế ca cao". Trên trang đó, cuộn xuống Mục lục ở bên trái cho đến khi bạn thấy mục "Mẫu thiết kế kiểu xem-bộ điều khiển". Chọn mục đó để đọc thêm chi tiết về mẫu thiết kế cụ thể đó.

2

Ý tưởng là ViewControllers giữ một cây các bản xem trước (và các bộ điều khiển xem phụ) và quản lý các sự kiện gửi đến/từ các bản xem trước của nó. Ví dụ: bạn có thể có chế độ xem giữ hình ảnh và chế độ xem đó sống trong bộ điều khiển chế độ xem xử lý các thay đổi hướng và cảnh báo bộ nhớ, v.v.

13

Tôi luôn sử dụng UITableView. Tôi không bao giờ sử dụng UITableViewController.

Sử dụng UITableViewController khó hiểu. Mỗi bộ điều khiển được cho là làm một màn hình ngoại trừ bộ điều khiển vùng chứa.

Vâng, UITableViewController là bộ điều khiển và phần lớn thời gian, một tableView đơn giản không phải là điều duy nhất ở đó.

Nếu bạn nhìn vào tài liệu: http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewController_Class/Reference/Reference.html

UITableViewController cung cấp rất ít giao diện mới so với UITableView. Không ai trong số đó là điều cần thiết.

– initWithStyle: 

(duh?Tôi khởi tableView của tôi trong nib và tôi tùy chỉnh rất nhiều nào)

Lấy bảng Xem

tableView property 

(bản gốc tableView)

Cấu hình Bảng Behavior

clearsSelectionOnViewWillAppear property 

(được rồi, chỉ cần đặt một số mã trên ViewWillAppear)

Refreshing bàn xem

refreshControl property 

[tableView tải lại]?

Vì vậy, bạn thấy đấy,

Vì vậy, trừ khi bạn muốn mã của bạn để trông gọn gàng (và không nhiều hơn nữa), không có lý do để sử dụng UITableViewController, mà tôi biết.

+0

Chỉ UITableViewController mới có thể có nội dung tĩnh. https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/TableView_iPhone/TableViewCells/TableViewCells.html#//apple_ref/doc/uid/TP40007451-CH7-SW20 –

+0

Ngoài ra, 'UITableViewController' có một số chức năng (ví dụ, làm nổi bật trên pop điều hướng) và thiết lập đã được thực hiện cho bạn, vì vậy bạn không phải phát minh lại bánh xe/tinh chỉnh bất cứ điều gì bố trí liên quan (đặc biệt là sau iOS 7), và nó hoạt động như mong đợi từ đầu. Tôi sẽ chỉ giới thiệu phương pháp của bạn nếu tôi cần chia sẻ màn hình với các bản xem trước khác so với bảng. –

1

Đây là một điều tôi thấy rất khó hiểu về Cocoa: Việc triển khai MVC của Apple (hoặc ít nhất là thuật ngữ họ sử dụng) là vấn đề. Trong Cocoa, hầu hết các khung nhìn đều thực sự hoạt động trong một số dung lượng như các bộ điều khiển trong khi mô hình MVC định nghĩa chúng (chỉ cần xem UITableView - tối đa các phương thức của nó thực sự là các phương thức điều khiển). Vì vậy, bạn có khái niệm bổ sung của Apple về một bộ điều khiển xem trên đầu trang của những gì đã đến một mức độ nào đó một bộ điều khiển. Thực tế là bạn thậm chí không cần phải sử dụng UITableViewController ở tất cả (ngay cả với ràng buộc dữ liệu) về cơ bản chứng minh rằng chế độ xem đang hoạt động như bộ điều khiển riêng của nó. Trong MVC, bạn không thể có một khung nhìn ràng buộc với một mô hình không có bộ điều khiển (đó là toàn bộ điểm của bộ điều khiển trong MVC).

Nó dường như các nhà phát triển của Apple, rằng một "quan điểm điều khiển" (ví dụ UITableViewController) thực sự là nhiều hơn một cấp cao hơn lớp helper/quản lý hơi quản lý lớp UITableView ở mức độ thấp hơn đồng thời bật một vài chính additional capabilities có liên quan nhiều hơn đến cách giao diện xem bảng với giao diện người dùng chung của ứng dụng. Ngoài ra, có vẻ như Apple dự định cho một bộ điều khiển xem thực sự có nhiều bộ điều khiển màn hình hơn, chỉ giới thiệu một bộ điều khiển xem cho mỗi màn hình (có lẽ bạn không thể lồng bộ điều khiển xem). Tôi duy trì rằng gọi khái niệm này một bộ điều khiển xem là một sự nhầm lẫn.

Vui lòng không ngần ngại khắc phục tôi về bất kỳ ai, tôi vẫn còn rất mới đối với Obj-C/Cocoa.

0
UITableView is a view and UITableViewController is a controller having UITableView as its root view. 

So by using UITableViewController: 
1. You have one root view that is UITableView itself. So takes less memory than UITableView with UIView as parent view in controller. 
2. Provides you ready to use template, if you needed a controller and UITableView as its main display view. 
3. Static table views are only valid when embedded in UITableViewController instances. 
Các vấn đề liên quan