Khi nào sử dụng UICollectionView thay vì UITableView?


92

Tôi thấy rằng đó UICollectionViewgiống như một phiên bản nâng cấp được UITableViewgiới thiệu trong iOS6, nhưng khi nào tôi nên chọn UICollectionViewthay vì UITableView?

Vẫn có các ứng dụng đang sử dụng UITableView, nếu UICollectionViewcó thể làm bất cứ điều gì UITableViewcó thể làm, tại sao mọi người vẫn sử dụng UITableView? Có sự khác biệt liên quan đến hiệu suất không?

Cảm ơn!

Câu trả lời:


75

Điều đó phụ thuộc vào yêu cầu. Cách luồng ứng dụng xác định loại giao diện người dùng nào sẽ tích hợp vào ứng dụng.

Mọi người chủ yếu sử dụng UICollectionviewđể tạo các loại giao diện người dùng với nhiều hình ảnh được hiển thị trong lưới. Điều này sẽ có logic phức tạp bằng cách sử dụng UITableView, nhưng với UICollectionview, nó sẽ dễ dàng.

Khi sử dụng UICollectionview, bạn không cần đặt các nút có thẻ hoặc những thứ khác bằng cách nhận các giá trị mục đã chọn. Bạn chỉ cần truy cập -(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPathvà vào UITableViewDelegate:

`-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath`

Bạn nhận được hàng đã chọn thay vì mục, vì vậy để tạo lưới hoặc các mục đã sửa đổi, UICollectionviewtốt nhất là sử dụng .

Để biết chi tiết danh sách của từng mặt hàng, mọi người sử dụng UITableViewvì nó hiển thị nhiều thông tin hơn về từng mặt hàng.

Tài liệu Apple:

Tham chiếu lớp UICollectionView

Lớp UICollectionView quản lý tập hợp các mục dữ liệu có thứ tự và trình bày chúng bằng cách sử dụng bố cục có thể tùy chỉnh. Chế độ xem bộ sưu tập cung cấp chức năng chung giống như chế độ xem bảng ngoại trừ việc chế độ xem bộ sưu tập có thể hỗ trợ nhiều hơn là chỉ bố trí cột đơn. Chế độ xem bộ sưu tập hỗ trợ các bố cục có thể tùy chỉnh có thể được sử dụng để triển khai lưới nhiều cột, bố cục lát gạch, bố cục hình tròn, v.v. Bạn thậm chí có thể tự động thay đổi bố cục của chế độ xem bộ sưu tập nếu bạn muốn.

Tham chiếu lớp UITableView

Chế độ xem bảng hiển thị danh sách các mục trong một cột. UITableView là một lớp con của UIScrollView, cho phép người dùng cuộn qua bảng, mặc dù UITableView chỉ cho phép cuộn dọc. Các ô bao gồm các mục riêng lẻ của bảng là các đối tượng UITableViewCell; UITableView sử dụng các đối tượng này để vẽ các hàng hiển thị của bảng. Các ô có nội dung — tiêu đề và hình ảnh — và có thể có các dạng xem phụ kiện, gần mép phải. Chế độ xem phụ kiện tiêu chuẩn là các chỉ báo tiết lộ hoặc các nút tiết lộ chi tiết; cái trước dẫn đến cấp độ tiếp theo trong hệ thống phân cấp dữ liệu và cấp độ thứ hai dẫn đến chế độ xem chi tiết của một mục đã chọn. Chế độ xem phụ kiện cũng có thể là điều khiển khung, chẳng hạn như công tắc và thanh trượt, hoặc có thể là chế độ xem tùy chỉnh. Chế độ xem bảng có thể vào chế độ chỉnh sửa nơi người dùng có thể chèn, xóa và sắp xếp lại các hàng của bảng.


3
Tôi nghĩ về khả năng mở rộng - Lượt xem bộ sưu tập nhiều hơn !!
thatzprem

Tôi tự hỏi tại sao người ta cần sử dụng tableview khi collectionview có thể phục vụ tất cả các nhu cầu mà không có thêm sự phức tạp nhưng cung cấp tính linh hoạt (nếu khách hàng cần mở rộng bố cục đến nhiều hơn một cột, sẽ khá dễ dàng để làm điều đó với collectionview ). Tôi luôn sử dụng tableview theo mặc định nhưng bây giờ tôi nghi ngờ liệu điều đó có hợp lý để chuyển sang collectionview hay không. Tui bỏ lỡ điều gì vậy?
vir us

tất cả đều dựa trên yêu cầu chính. Chế độ xem bộ sưu tập giới thiệu muộn và cho đến lúc đó tất cả các nhà phát triển đều sử dụng bảng để tạo lưới và những thứ đó. nhưng giờ đây, collectionview một ngày được sử dụng phổ biến nhất để tạo bố cục như tableview. cũng vì vậy tôi không nghĩ rằng một ý tưởng tồi để collectionviews sử dụng
Nitin Gohel

Cảm ơn bạn đã giải thích của bạn.
ssowri1

45

Đây là tiêu chí của tôi:

  • Nếu UITableView có thể làm được điều đó, hãy sử dụng nó

  • Nếu một UITableView cần nhiều mã để thực hiện hoặc hoàn toàn không thể làm được, hãy sử dụng UICollectionView.

Bạn phải xem xét các hạn chế trên UITableView trước khi đưa ra quyết định: Đó là một cột duy nhất. Và bạn chỉ có thể tùy chỉnh các ô chứ không thể tùy chỉnh hình nền của phần và những thứ tương tự. Vì vậy, nếu bạn có một danh sách thẳng thắn về những thứ không rườm rà - về cơ bản trông giống như một chế độ xem iOS tiêu chuẩn sa lầy - thì hãy sử dụng UITableview. Nếu bạn có đường viền tùy chỉnh hoặc đường viền xung quanh mỗi phần, hãy sử dụng UICollectionView.

Tôi thực sự đang xem xét UICollectionView cho tất cả mọi thứ đơn giản vì nó rất tốn kém khi bạn bắt đầu phát triển chế độ xem của mình dưới dạng chế độ xem bảng, sau đó phát hiện ra rằng nó không thể thực hiện một điều mà bạn cần nó làm. Kinh nghiệm đầu tiên;)

Chỉnh sửa sau khi trải nghiệm nhiều hơn với cả hai: Bỏ qua đoạn cuối cùng đó. UICollectionView yêu cầu rất nhiều mã soạn sẵn để làm cho nó hoạt động giống như UITableView. Chỉ sử dụng UICollectionView khi thực sự cần thiết. ;)


3
Câu trả lời hoàn hảo mà tôi đang tìm kiếm! Điều này nên được bình chọn nhiều hơn!
rak appdev

2
Tiết lộ kinh nghiệm cá nhân và đề xuất của bạn là rất hữu ích!
hàng không

1
Tôi chắc chắn cười khúc khích khi đọc điều này, nói hay! UITableView cũng có thể tùy chỉnh như bất kỳ thứ gì, ngoại trừ nó sẽ bị lỗi nếu bạn thêm các hình ảnh động bù đắp cho hàng đợi. Tôi muốn giới thiệu câu trả lời của bạn để đi cùng với hướng dẫn Hoạt ảnh và một số nghiên cứu để cá nhân tìm hiểu có bao nhiêu chế độ xem nội bộ tồn tại để bạn có thể làm mới chúng và vấn đề "Tôi không thể làm cho đường phân cách ẩn" mà bạn cuối cùng sẽ không ngạc nhiên bất kỳ ai. Chế độ xem ẩn trong scrollView, UIButton và tableView loại bỏ hầu hết các tùy chỉnh cho đến khi bạn biết chúng bị ẩn trong những thứ
Stephen J

33

Đối với danh sách đơn giản và điều hướng chuyển tiếp / ngược lại, hãy sử dụng UITableView.

Nếu bạn cần mức độ tùy biến cao, hãy sử dụng UICollectionView.

Nói chung, trong phát triển phần mềm, tốt nhất nên chọn cách tiếp cận đại diện cho "Điều đơn giản nhất có thể xảy ra".

CHỈNH SỬA: Kể từ iOS 14, UICollectionViewbây giờ cũng có thể làm danh sách và hiện là cách tiếp cận được khuyến nghị. Xem phiên này từ WWDC20 để biết thêm thông tin và chi tiết triển khai: https://developer.apple.com/videos/play/wwdc2020/10026/


14

Theo quan điểm của tôi, sự khác biệt chính giữa collectionView và tableView là

TABLEVIEW -> hiển thị danh sách các mục chỉ trong một cột.

THU-XEM -> hiển thị danh sách các mục trong nhiều cột.

Hy vọng nó sẽ giúp ích cho bạn.


11

Nếu bạn chọn UITableView cho iPhone, hãy đảm bảo rằng bạn đã cân nhắc chiến lược iPad của mình trước. Nếu bạn muốn một bố cục dành riêng cho iPad, bạn có thể muốn bố cục một cột đó trở thành một lưới.


8

Mặc dù nó không bắt buộc, tôi luôn sử dụng chế độ xem bộ sưu tập. Bằng cách đó, tôi có thể dễ dàng điều chỉnh cách trình bày các bộ sưu tập của mình cho các độ phân giải khác nhau. Một điểm cộng là nó sẵn sàng nhanh chóng thêm các loại ô mới khi tái cấu trúc trong tương lai.

Tôi thấy không có quan điểm của bảng. Rất đơn giản để sử dụng dạng xem bộ sưu tập để biểu diễn một bảng. IMO.


4

Nó hoàn toàn phụ thuộc vào cách dữ liệu của bạn được hiển thị. Như đã đề cập ở trên, nếu bạn chỉ yêu cầu một tập dữ liệu duy nhất và không quá phức tạp, hãy chuyển sang UITableViewsử dụng khác UICollectionView.

UICollectionView là tùy biến thân thiện.

Nếu bạn đang xử lý nhiều độ cao ô hoặc hơn, thì hãy chọn UICollectionView.


4

Từ kinh nghiệm cá nhân của tôi, hai yếu tố chỉ nên được so sánh một cách lỏng lẻo.

TableView

TableView là một phần tử giao diện người dùng được thiết kế để hiển thị dữ liệu ở định dạng danh sách. Có một số chức năng tiêu chuẩn với UITableView, chẳng hạn như:

  • Chế độ xem phụ kiện
  • Kiểu chọn ô
  • Chỉnh sửa kiểu (Xóa và chỉnh sửa các nút).

Các yếu tố trên nâng cao khả năng sử dụng của dữ liệu khi hiển thị và tương tác ở định dạng danh sách. Chẳng hạn như xem email.

CollectionView

CollectionView là một phần tử giao diện người dùng được thiết kế để hiển thị nội dung bằng cách sử dụng bố cục tùy chỉnh (thường là bất kỳ thứ gì không phải là danh sách). CollectionViews cải thiện chức năng hiển thị dữ liệu theo các kiểu bố cục hoàn toàn đặt riêng và cũng có thể tự động thay đổi bố cục một cách nhanh chóng. Một số ví dụ:

  • Danh sách ngang
  • Thư viện ảnh
  • Chế độ xem hình thu nhỏ
  • Băng chuyền
  • Quay số
  • Bố trí các yếu tố trên bản đồ
  • Vân vân.

CollectionViews cũng cho phép nhiều lựa chọn.

Phần kết luận

Như bạn có thể thấy ở trên, cả hai đều có các trường hợp sử dụng hoàn toàn khác nhau và được thiết kế để nâng cao sự phát triển và khả năng sử dụng của các tập dữ liệu cụ thể của riêng chúng.

Nếu bạn đang xem xét hiển thị bất kỳ thứ gì theo kiểu danh sách với các tương tác sau: - Thêm - Xóa - Sắp xếp lại thì UITableView sẽ đơn giản hóa quá trình này bằng cách cung cấp hỗ trợ ngay lập tức.

Bất cứ điều gì khác, bạn nên tận dụng các lợi ích của CollectionView vì bạn có tính linh hoạt hơn.


2

Cả hai đều phụ thuộc vào yêu cầu. Chế độ xem Bảng cũng hỗ trợ nhiều tình huống chỉnh sửa khác nhau. Hỗ trợ này chưa được triển khai trong các lớp Chế độ xem Bộ sưu tập. Nếu bạn đang chuyển đổi từ Chế độ xem bảng dựa trên các phương pháp này, hãy mong đợi thực hiện thêm một chút nặng nề trong Chế độ xem bộ sưu tập. Tiêu đề phần Chế độ xem Bộ sưu tập có thể được đặt ở bất kỳ đâu trong chế độ xem. và UITableView không cần đặt các nút có thẻ hoặc những thứ khác bằng cách nhận các giá trị mục đã chọn.


1

Trong thực tế, mọi người đều sử dụng UICollectionView mà tôi đã xem qua, khi họ chỉ cần một UITableView. "Nó là một chiều. Nó lên xuống. Tại sao bạn lại thêm các phương thức ủy quyền không cần thiết cho bố cục AND dữ liệu?". Tôi đã từng dành thêm 2 giờ để giúp một công ty khởi nghiệp tìm hiểu lý do tại sao UICollectionViewCell của họ bị bóp méo bởi vì chủ sở hữu, người không đọc hướng dẫn Animations, HIG, cũng như hướng dẫn UICollectionView, đã quyết định sử dụng nó và thêm chiều cao và anims biến đổi. Không cần phải nói, anh ấy đã tự làm mình đau đầu và mất nhiều thời gian cho một vấn đề không quan trọng mà anh ấy có thể tránh bằng cách sử dụng một ô bảng, vì không có đại biểu bố cục bổ sung + Nib.

Hãy để tôi nói thẳng điều này, tôi là tất cả vì UICollectionView khi dữ liệu và màn hình của bạn cần. Chúng rất mạnh mẽ. Nhưng trên thực tế, hầu hết những người tôi từng gặp đều sử dụng chúng trong danh sách.

Điều này dẫn đến một lỗ hổng khác. Chúng cũng được sử dụng trong các danh sách ngắn, không đổi và sẽ không thay đổi. Trong trường hợp này, chỉ cần thực hiện một Xib. Hoặc viết một dạng xem tùy chỉnh xếp chồng chúng. Tại sao? Bởi vì bạn không cần quản lý bộ nhớ cho 5 bộ nhãn bằng nút hoặc công tắc. Nếu chúng có thể thay đổi, thì có, hãy sử dụng một danh sách. Nếu bạn muốn vật lý, thì UICollectionView hoạt động tốt với một số hiệu ứng thú vị. Nhưng bạn có thực sự cần thêm 5 phương thức ủy quyền và hệ thống bố cục cho 5 nhãn sẽ không bao giờ di chuyển không?

Ngoài ra, tôi không quên rằng iOS hiện cũng có chế độ xem xếp chồng gốc. Tôi không bao giờ có thể làm cho nó biến dạng theo cách tôi muốn, mặc dù tôi khá thành thạo hệ thống 2D và hoạt hình, vì vậy tôi không bao giờ sử dụng hệ thống tích hợp sẵn.

Tất cả những gì tôi đang nói là, xác định yêu cầu của bạn. Có thể bạn không cần một trong hai thứ này, nếu giao diện người dùng của bạn không thêm / xóa các mục và làm mới chính nó. Hoặc có thể bạn muốn viết một Trò chơi Bài và ném chúng ảo trên bàn, sau đó sử dụng UICollectionView với một hệ thống vật lý để hướng dẫn bố cục của nó.


0

Dựa trên nhu cầu của chúng tôi, chúng tôi sẽ chọn TableView hoặc CollectionView.

Thí dụ:

Đối với danh bạ điện thoại, tableView là lựa chọn tốt nhất.

Đối với thư viện ảnh, chế độ xem bộ sưu tập sẽ là lựa chọn tốt nhất.


7
Trong khi tôi đồng ý cách này được đưa ra có vẻ giống một ý kiến ​​hơn và tôi nghĩ nó chỉ nên là một bình luận chứ không phải là một câu trả lời.
Popeye

0

Tôi đã gặp vấn đề này trong dự án hiện tại của mình. Sử dụng cái nào. Trong trường hợp của tôi, nó thực sự đơn giản. Tôi cần cả hai. Tôi cần chế độ xem của mình trông giống như UITableView và cũng có thể thay đổi bố cục / thay đổi của nó. Vì vậy, UICollectionView đã được sử dụng. Tôi cũng sử dụng UITableView ở mọi nơi mà tôi không cần tùy chỉnh thêm. Vì UiTableView đi kèm với một bố cục mặc định bao gồm hình ảnh và văn bản - tôi sử dụng nó vì sự đơn giản.


0

Dựa trên yêu cầu của chúng tôi, chúng tôi chọn chế độ xem UITableView hoặc UICollection.

Nếu chúng ta muốn hiển thị hình ảnh hoặc mục ở dạng lưới hoặc nếu chúng ta cần nhiều khả năng tùy biến hơn, chúng ta sử dụng UICollectionview.

Để liệt kê từng mục với chi tiết và chi tiết nhỏ, chúng tôi sử dụng UITableView.

UICollectionView: Lớp UICollectionView quản lý tập hợp các mục dữ liệu có thứ tự và trình bày chúng bằng cách sử dụng bố cục có thể tùy chỉnh. Chế độ xem bộ sưu tập cung cấp chức năng chung giống như chế độ xem bảng ngoại trừ việc chế độ xem bộ sưu tập có thể hỗ trợ nhiều hơn là chỉ bố trí cột đơn.

UITableView: Chế độ xem bảng hiển thị danh sách các mục trong một cột. UITableView là một lớp con của UIScrollView, cho phép người dùng cuộn qua bảng, mặc dù UITableView chỉ cho phép cuộn dọc.


0

Theo quan điểm của tôi đối với hiển thị Grid View, hãy sử dụng UI Collection View. Tất cả các chế độ xem danh sách khác đều sử dụng UITable View


0

Cá nhân tôi nghĩ UICollectionView có thể làm hầu hết công việc mà UITableview có thể làm. tốt, đồng thời, nó phức tạp hơn để sử dụng.

Tôi khuyên bạn nên sử dụng UICollectionView dưới dạng TableView chỉ trong trường hợp người quản lý của bạn thay đổi yêu cầu trong tương lai.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.