Kapan menggunakan UICollectionView sebagai ganti UITableView?


92

Saya menemukan bahwa UICollectionViewseperti versi upgrade dari UITableViewdiperkenalkan di iOS6, tapi ketika saya harus memilih UICollectionViewbukan UITableView?

Masih ada Apps yang menggunakan UITableView, kalau UICollectionViewbisa berbuat apa saja UITableViewbisa, kenapa orang masih pakai UITableView? Apakah ada perbedaan dalam hal kinerja?

Terima kasih!

Jawaban:


75

Itu tergantung pada kebutuhan. Bagaimana alur aplikasi menentukan jenis UI yang akan diintegrasikan ke dalam aplikasi.

Orang terutama menggunakan UICollectionviewuntuk membuat jenis UI dengan beberapa gambar yang ditampilkan dalam kisi. Ini akan menggunakan logika yang kompleks UITableView, tetapi denganUICollectionview , itu akan mudah.

Saat menggunakan UICollectionview, Anda tidak perlu mengatur tombol dengan tag atau hal lain dengan mendapatkan nilai item yang dipilih. Anda cukup masuk -(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPathdan masuk UITableViewDelegate:

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

Anda mendapatkan baris yang dipilih, bukan item, jadi untuk membuat kisi atau item yang dimodifikasi, gunakan UICollectionview yang terbaik.

Untuk detail daftar setiap item, orang menggunakan UITableView karena menunjukkan lebih banyak info pada setiap item.

Apple Docs:

Referensi Kelas UICollectionView

Kelas UICollectionView mengelola kumpulan item data yang dipesan dan menyajikannya menggunakan tata letak yang dapat disesuaikan. Tampilan kumpulan menyediakan fungsi umum yang sama seperti tampilan tabel kecuali bahwa tampilan kumpulan dapat mendukung lebih dari sekadar tata letak kolom tunggal. Tampilan koleksi mendukung tata letak yang dapat disesuaikan yang dapat digunakan untuk mengimplementasikan kisi multi-kolom, tata letak berubin, tata letak melingkar, dan banyak lagi. Anda bahkan dapat mengubah tata letak tampilan koleksi secara dinamis jika Anda mau.

Referensi Kelas UITableView

Tampilan tabel menampilkan daftar item dalam satu kolom. UITableView adalah subkelas dari UIScrollView, yang memungkinkan pengguna untuk menggulir tabel, meskipun UITableView hanya mengizinkan pengguliran vertikal. Sel yang terdiri dari item individual pada tabel adalah objek UITableViewCell; UITableView menggunakan objek ini untuk menggambar baris tabel yang terlihat. Sel memiliki konten — judul dan gambar — dan dapat memiliki, di dekat tepi kanan, tampilan aksesori. Tampilan aksesori standar adalah indikator pengungkapan atau tombol pengungkapan detail; yang pertama mengarah ke tingkat berikutnya dalam hierarki data dan yang terakhir mengarah ke tampilan terperinci dari item yang dipilih. Tampilan aksesori juga dapat berupa kontrol kerangka kerja, seperti sakelar dan slider, atau dapat berupa tampilan kustom. Tampilan tabel dapat memasuki mode pengeditan di mana pengguna dapat menyisipkan, menghapus, dan menyusun ulang baris tabel.


3
Saya pikir dalam hal perpanjangan - Tampilan koleksi lebih banyak !!
thatzprem

Saya bertanya-tanya mengapa seseorang perlu menggunakan tampilan tabel ketika collectionview dapat melayani semua kebutuhan tanpa kerumitan tambahan tetapi memberikan fleksibilitas (jika pelanggan perlu memperluas tata letak ke lebih dari satu kolom, akan sangat mudah untuk melakukannya dengan collectionview ). Saya selalu menggunakan tampilan tabel secara default tetapi sekarang saya ragu apakah itu masuk akal untuk beralih ke tampilan koleksi. Apakah saya melewatkan sesuatu?
vir us

semuanya berdasarkan kebutuhan utama. Tampilan koleksi diperkenalkan terlambat dan sampai saat itu semua dev menggunakan tabel untuk membuat grid dan hal semacam itu. tapi sekarang days collectionview paling populer digunakan untuk membuat tata letak seperti tableview. juga jadi saya tidak berpikir itu ide yang buruk untuk menggunakan collectionviews
Nitin Gohel

Terima kasih atas penjelasan Anda.
ssowri1

47

Inilah kriteria saya:

  • Jika UITableView bisa melakukannya, gunakanlah

  • Jika UITableView membutuhkan banyak kode untuk melakukannya atau tidak bisa melakukannya sama sekali, gunakan UICollectionView.

Anda harus mempertimbangkan batasan pada UITableView sebelum membuat keputusan: Ini adalah satu kolom. Dan Anda hanya dapat menyesuaikan sel, tetapi bukan latar belakang bagian dan semacamnya. Jadi jika Anda memiliki daftar langsung hal-hal tanpa embel-embel tambahan - yang terlihat seperti tampilan iOS standar rawa, pada dasarnya - maka gunakan UITableview. Jika Anda memiliki inset khusus, atau batas di sekitar setiap bagian, gunakan UICollectionView.

Saya sebenarnya sedang mempertimbangkan UICollectionView untuk semua hal hanya karena sangat mahal saat Anda mulai mengembangkan tampilan sebagai tampilan tabel, kemudian mengetahui bahwa UICollectionView tidak dapat melakukan satu hal yang Anda perlukan. Pengalaman tangan pertama;)

Edit setelah lebih banyak pengalaman dengan keduanya: Abaikan paragraf terakhir itu. UICollectionView membutuhkan banyak kode boilerplate untuk membuatnya berfungsi seperti UITableView. Gunakan UICollectionView hanya jika benar-benar dibutuhkan. ;)


3
Jawaban sempurna yang saya cari! Ini harus lebih banyak dipilih!
rak appdev

2
Mengungkapkan pengalaman pribadi dan rekomendasi Anda sangat membantu!
aero

1
Saya pasti terkekeh membaca ini, kata yang bagus! UITableView dapat disesuaikan seperti apa pun, kecuali UITableView akan macet jika Anda menambahkan animasi yang mengimbangi antrian. Saya akan merekomendasikan jawaban Anda untuk mengikuti panduan Animasi, dan beberapa penggalian untuk secara pribadi mempelajari berapa banyak tampilan internal yang ada sehingga Anda dapat menyegarkannya, dan masalah "Saya tidak dapat membuat garis pemisah tidak terlihat" yang akhirnya Anda temukan tidak akan mengejutkan siapa saja. Tampilan tersembunyi di scrollView, UIButton, dan tableView membuang sebagian besar penyesuaian sampai Anda tahu bahwa mereka tersembunyi dalam berbagai hal
Stephen J

33

Untuk daftar sederhana dan navigasi maju / mundur, gunakan UITableView .

Jika Anda membutuhkan tingkat penyesuaian yang tinggi, gunakan UICollectionView .

Secara umum, dalam pengembangan perangkat lunak, yang terbaik adalah memilih pendekatan yang mewakili "Hal yang Mungkin Paling Sederhana".

EDIT: Mulai iOS 14, UICollectionViewsekarang dapat melakukan daftar juga dan sekarang menjadi pendekatan yang direkomendasikan. Lihat sesi ini dari WWDC20 untuk informasi lebih lanjut dan detail implementasi: https://developer.apple.com/videos/play/wwdc2020/10026/


14

Menurut sudut pandang saya, perbedaan utama antara collectionView dan tableView adalah itu

TABLEVIEW -> tampilkan daftar item hanya dalam satu kolom.

KOLEKSI-TAMPILAN -> tampilkan daftar item dalam beberapa kolom.

Semoga bisa membantu Anda.


11

Jika Anda memilih UITableView untuk iPhone, pastikan Anda telah mempertimbangkan strategi iPad Anda terlebih dahulu. Jika Anda menginginkan tata letak khusus iPad, Anda mungkin ingin tata letak satu kolom itu menjadi kisi.


8

Meski tidak wajib, saya selalu menggunakan collectionview. Dengan cara itu saya dapat dengan mudah menyesuaikan bagaimana koleksi saya disajikan untuk resolusi yang berbeda. Nilai tambahnya adalah ia siap menambahkan jenis sel baru dengan cepat saat melakukan pemfaktoran ulang di masa mendatang.

Saya melihat tidak ada gunanya tampilan tabel. Sangat mudah menggunakan tampilan koleksi untuk mewakili tabel. IMO.


4

Ini sepenuhnya tergantung pada bagaimana data Anda ditampilkan. Seperti yang disebutkan oleh banyak orang di atas, jika Anda hanya memerlukan satu set data dan itu terlalu tidak rumit, UITableViewgunakan yang lainUICollectionView .

UICollectionView ramah kustomisasi.

Jika Anda berurusan dengan beberapa ketinggian sel atau lebih, maka lakukan UICollectionView.


4

Dari pengalaman pribadi saya, kedua elemen itu hanya boleh dibandingkan secara longgar.

TableView

TableView adalah elemen UI yang dirancang untuk menampilkan data dalam format daftar. Ada fungsionalitas tertentu yang menjadi standar dengan UITableView, seperti:

  • Tampilan Aksesori
  • Gaya Pemilihan Sel
  • Mengedit Gaya (tombol Hapus dan edit).

Elemen di atas meningkatkan kegunaan data saat menampilkan dan berinteraksi dalam format daftar. Seperti melihat email.

CollectionView

CollectionView adalah elemen UI yang dirancang untuk menampilkan konten menggunakan tata letak khusus (biasanya apa pun yang bukan daftar). CollectionView meningkatkan fungsionalitas menampilkan data dalam gaya tata letak yang benar-benar dipesan lebih dahulu dan juga secara dinamis mengubah tata letak dengan cepat. Beberapa contohnya adalah:

  • Daftar Horizonal
  • Galeri Foto
  • Tampilan gambar kecil
  • Korsel
  • Dial
  • Menata elemen di peta
  • dll.

CollectionView juga memungkinkan beberapa pilihan.

Kesimpulan

Seperti yang Anda lihat di atas, keduanya memiliki kasus penggunaan yang sangat berbeda dan dirancang untuk meningkatkan pengembangan dan kegunaan kumpulan data spesifik mereka sendiri.

Jika Anda ingin menampilkan sesuatu dalam gaya daftar dengan interaksi berikut: - Menambahkan - Menghapus - Mengurutkan Ulang Kemudian UITableView akan menyederhanakan proses ini dengan memberikan dukungan langsung dari kotaknya.

Apa pun yang lain, Anda harus memanfaatkan manfaat CollectionView karena Anda memiliki lebih banyak fleksibilitas.


2

Keduanya tergantung dari kebutuhan. Tampilan Tabel juga memiliki dukungan untuk berbagai skenario pengeditan. Dukungan ini belum diterapkan di kelas Tampilan Koleksi. Jika Anda mengonversi dari Tampilan Tabel yang mengandalkan metode ini, perkirakan untuk melakukan pengangkatan yang lebih berat dalam Tampilan Koleksi. Header bagian Collection View dapat ditempatkan di mana saja dalam tampilan. dan UITableView tidak perlu mengatur tombol dengan tag atau hal lain dengan mendapatkan nilai item yang dipilih.


1

Dalam praktiknya, semua orang menggunakan UICollectionView yang saya temui, padahal mereka hanya membutuhkan UITableView. "Ini satu dimensi. Ini naik dan turun. Mengapa Anda menambahkan metode delegasi yang tidak perlu untuk tata letak AND data?". Saya pernah menghabiskan 2 jam ekstra untuk membantu startup mencari tahu mengapa UICollectionViewCell mereka tertekan karena pemiliknya, yang tidak membaca manual Animations, atau HIG, atau panduan UICollectionView, memutuskan untuk menggunakannya dan menambahkan ketinggian variabel dan anim. Tak perlu dikatakan lagi, dia membuat dirinya sendiri pusing dan banyak kehilangan waktu untuk masalah non-bisnis-kritis yang bisa dia hindari hanya dengan menggunakan sel tabel, karena tidak ada delegasi tata letak tambahan + Nib.

Biarkan saya meluruskan ini, saya mendukung UICollectionView ketika data dan tampilan Anda membutuhkannya. Mereka sangat kuat. Namun dalam praktiknya, kebanyakan orang yang pernah saya lihat telah menggunakannya dalam daftar.

Ini memunculkan kesalahan lain. Mereka juga digunakan pada daftar pendek dan konstan yang tidak akan pernah berubah. Dalam hal ini, buat saja Xib. Atau tulis tampilan ubahsuaian yang menyusunnya. Mengapa? Karena Anda tidak memerlukan manajemen memori untuk 5 set label dengan tombol atau sakelar. Jika mereka mungkin berubah, maka ya, gunakan daftar. Jika Anda menginginkan fisika, maka UICollectionView bekerja dengan baik dengan beberapa efek keren. Tetapi apakah Anda benar-benar perlu menambahkan 5 metode delegasi dan sistem tata letak untuk 5 label yang tidak akan pernah bergerak?

Juga, saya tidak lupa bahwa iOS memiliki tampilan susun asli sekarang juga. Saya tidak pernah bisa mengubah bentuknya seperti yang saya inginkan, meskipun saya cukup mahir dalam 2D ​​dan sistem animasinya, jadi saya tidak pernah menggunakan yang built-in.

Yang saya katakan adalah, tentukan kebutuhan Anda. Mungkin Anda tidak memerlukan salah satu dari ini, jika UI Anda tidak menambah / menghapus item dan menyegarkan sendiri. Atau mungkin Anda ingin menulis Permainan Kartu dan membuangnya secara virtual di atas meja, lalu gunakan UICollectionView dengan sistem fisika untuk panduan tata letaknya.


0

Berdasarkan kebutuhan kita, kita memilih TableView atau CollectionView.

Contoh:

Untuk kontak telepon tableView adalah pilihan terbaik.

Untuk galeri foto, tampilan koleksi akan menjadi pilihan terbaik.


7
Sementara saya setuju cara ini diletakkan lebih seperti opini dan saya pikir itu seharusnya hanya komentar bukan jawaban.
Popeye

0

Saya mengalami masalah ini dalam proyek saya saat ini. Yang akan digunakan. Dalam kasus saya itu sangat sederhana. Saya membutuhkan keduanya. Saya membutuhkan tampilan saya agar terlihat seperti UITableView dan juga untuk mengubah perubahan / tata letaknya. Jadi, UICollectionView digunakan. Saya juga menggunakan UITableView di mana pun saya tidak memerlukan penyesuaian tambahan. Karena UiTableView hadir dengan tata letak default yang menyertakan gambar dan teks - saya menggunakannya untuk kesederhanaan.


0

Berdasarkan kebutuhan kami, kami memilih tampilan UITableView atau UICollection.

Jika kami ingin menampilkan gambar atau item dalam tipe grid atau jika kami membutuhkan lebih banyak penyesuaian, kami menggunakan UICollectionview.

Untuk mendaftar setiap item dengan detail dan subdetail kami menggunakan UITableView.

UICollectionView: Kelas UICollectionView mengelola kumpulan item data yang diurutkan dan menyajikannya menggunakan tata letak yang dapat disesuaikan. Tampilan kumpulan menyediakan fungsi umum yang sama seperti tampilan tabel kecuali bahwa tampilan kumpulan dapat mendukung lebih dari sekadar tata letak kolom tunggal.

UITableView: Tampilan tabel menampilkan daftar item dalam satu kolom. UITableView adalah subclass dari UIScrollView, yang memungkinkan pengguna untuk menggulir tabel, meskipun UITableView hanya mengizinkan pengguliran vertikal.


0

Sesuai tampilan saya untuk tampilan Grid View gunakan UI Collection View. Semua tampilan daftar lainnya menggunakan UITable View


0

Secara pribadi saya pikir UICollectionView dapat melakukan sebagian besar pekerjaan yang dapat dilakukan UITableview. baik, pada saat yang sama, ini lebih rumit untuk digunakan.

Saya sarankan Anda menggunakan UICollectionView sebagai TableView kalau-kalau manajer Anda mengubah persyaratan di masa mendatang.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.