เมื่อใดควรใช้ UICollectionView แทน UITableView


95

ฉันพบว่าUICollectionViewเป็นเหมือนรุ่นอัพเกรดของUITableViewการแนะนำใน iOS6 แต่เมื่อฉันควรเลือกUICollectionViewแทนUITableView?

ยังมีแอพที่ใช้อยู่UITableViewถ้าUICollectionViewจะทำอะไรUITableViewก็ทำได้ทำไมคนยังใช้UITableView? มีความแตกต่างเท่าที่เกี่ยวข้องกับประสิทธิภาพหรือไม่?

ขอบคุณ!

คำตอบ:


75

ขึ้นอยู่กับข้อกำหนด โฟลว์ของแอปพลิเคชันกำหนดประเภทของ UI ที่จะรวมเข้ากับแอปพลิเคชันอย่างไร

ผู้คนส่วนใหญ่ใช้ในUICollectionviewการสร้างประเภทของ UI ที่มีภาพหลายภาพที่แสดงในตาราง สิ่งนี้จะมีตรรกะที่ซับซ้อนโดยใช้UITableViewแต่ด้วยUICollectionviewมันจะง่าย

เมื่อใช้UICollectionviewคุณไม่จำเป็นต้องตั้งค่าปุ่มด้วยแท็กหรือสิ่งอื่น ๆ โดยรับค่ารายการที่เลือก คุณสามารถเข้า-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPathและออกUITableViewDelegate:

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

คุณได้รับแถวที่เลือกแทนที่จะเป็นรายการดังนั้นสำหรับการสร้างตารางหรือรายการที่แก้ไขการใช้UICollectionviewจะดีที่สุด

สำหรับรายละเอียดรายการของแต่ละรายการผู้คนใช้UITableViewเพราะแสดงข้อมูลเพิ่มเติมในแต่ละรายการ

เอกสาร Apple:

การอ้างอิงคลาส UICollectionView

คลาส UICollectionView จัดการชุดข้อมูลตามลำดับและนำเสนอโดยใช้เค้าโครงที่ปรับแต่งได้ มุมมองคอลเลกชันมีฟังก์ชันทั่วไปเช่นเดียวกับมุมมองตารางยกเว้นว่ามุมมองคอลเลกชันสามารถรองรับได้มากกว่าเค้าโครงคอลัมน์เดียว มุมมองคอลเลคชันรองรับเลย์เอาต์ที่ปรับแต่งได้ซึ่งสามารถใช้เพื่อใช้กริดหลายคอลัมน์เลย์เอาต์แบบเรียงต่อกันเลย์เอาต์แบบวงกลมและอื่น ๆ อีกมากมาย คุณยังสามารถเปลี่ยนเค้าโครงของมุมมองคอลเลคชันแบบไดนามิกได้หากต้องการ

การอ้างอิงคลาส UITableView

มุมมองตารางแสดงรายการของรายการในคอลัมน์เดียว UITableView เป็นคลาสย่อยของ UIScrollView ซึ่งช่วยให้ผู้ใช้เลื่อนดูตารางได้แม้ว่า UITableView จะอนุญาตให้เลื่อนในแนวตั้งเท่านั้น เซลล์ที่ประกอบด้วยแต่ละรายการของตารางคือวัตถุ UITableViewCell UITableView ใช้วัตถุเหล่านี้เพื่อวาดแถวที่มองเห็นได้ของตาราง เซลล์มีเนื้อหา - ชื่อเรื่องและรูปภาพและอาจมีมุมมองอุปกรณ์เสริมใกล้ขอบด้านขวา มุมมองอุปกรณ์เสริมมาตรฐานคือตัวบ่งชี้การเปิดเผยหรือปุ่มเปิดเผยรายละเอียด อดีตนำไปสู่ระดับถัดไปในลำดับชั้นข้อมูลและลำดับหลังนำไปสู่มุมมองโดยละเอียดของรายการที่เลือก มุมมองอุปกรณ์เสริมสามารถเป็นตัวควบคุมกรอบเช่นสวิตช์และแถบเลื่อนหรืออาจเป็นมุมมองแบบกำหนดเอง มุมมองตารางสามารถเข้าสู่โหมดการแก้ไขที่ผู้ใช้สามารถแทรกลบและเรียงลำดับแถวของตารางใหม่ได้


3
ฉันคิดว่าในแง่ของการขยาย - การดูคอลเลกชันให้คะแนนมากกว่า !!
thatzprem

ฉันสงสัยว่าทำไมต้องใช้ tableview ในเมื่อ collectionview สามารถตอบสนองความต้องการทั้งหมดได้โดยไม่มีความซับซ้อนเพิ่มเติม แต่ให้ความยืดหยุ่น (หากลูกค้าต้องการขยายรูปแบบไปยังคอลัมน์มากกว่าหนึ่งคอลัมน์ก็น่าจะตรงไปตรงมาที่จะทำเช่นนั้นด้วย collectionview ). ฉันมักจะใช้ tableviews เป็นค่าเริ่มต้น แต่ตอนนี้ฉันสงสัยว่าเหมาะสมหรือไม่ที่จะเปลี่ยนไปใช้ collectionview แทน ฉันพลาดอะไรไปรึเปล่า?
เรา

ทั้งหมดขึ้นอยู่กับความต้องการหลัก มุมมองคอลเลกชันแนะนำในช่วงปลายและถึงจากนั้นนักพัฒนาทั้งหมดใช้ตารางเพื่อสร้างตารางและสิ่งนั้น ๆ แต่ตอนนี้คอลเลกชันวันหนึ่งเป็นที่นิยมมากที่สุดที่จะใช้ในการสร้างเลย์เอาต์เช่น tableview เช่นกันดังนั้นฉันไม่คิดว่ามันเป็นความคิดที่ดีที่จะใช้ collectionviews
Nitin Gohel

ขอบคุณสำหรับคำอธิบาย
ssowri1

49

นี่คือเกณฑ์ของฉัน:

  • หาก UITableView สามารถทำได้ให้ใช้มัน

  • หาก UITableView ต้องการโค้ดจำนวนมากเพื่อทำหรือไม่สามารถทำได้เลยให้ใช้ UICollectionView

คุณต้องพิจารณาข้อ จำกัด ของ UITableView ก่อนตัดสินใจ: เป็นคอลัมน์เดียว และคุณสามารถปรับแต่งเซลล์เท่านั้น แต่ไม่สามารถปรับแต่งพื้นหลังของส่วนได้ ดังนั้นหากคุณมีรายการสิ่งที่ตรงขึ้นโดยไม่มีความหรูหราเป็นพิเศษซึ่งดูเหมือนมุมมอง iOS มาตรฐานที่ไม่ดีโดยทั่วไปให้ใช้ UITableview หากคุณมีอินเซ็ตที่กำหนดเองหรือเส้นขอบรอบ ๆ แต่ละส่วนให้ใช้ UICollectionView

ฉันกำลังพิจารณา UICollectionView สำหรับทุกสิ่งเพียงเพราะราคาแพงมากเมื่อคุณเริ่มพัฒนามุมมองของคุณเป็นมุมมองตารางจากนั้นพบในภายหลังว่าไม่สามารถทำสิ่งหนึ่งที่คุณต้องการให้ทำได้ ประสบการณ์มือ 1;)

แก้ไขหลังจากประสบการณ์มากขึ้นกับสอง: ไม่คำนึงถึงย่อหน้าสุดท้ายนั้น UICollectionView ต้องการโค้ดสำเร็จรูปจำนวนมากเพื่อให้ทำงานเหมือนกับ UITableView ใช้ UICollectionView เมื่อจำเป็นจริงๆเท่านั้น ;)


3
คำตอบที่สมบูรณ์แบบที่ฉันกำลังมองหา! แบบนี้น่าโหวตกว่า!
rak appdev

2
การเปิดเผยประสบการณ์ส่วนตัวและคำแนะนำของคุณมีประโยชน์มาก!
aero

1
ฉันหัวเราะเบา ๆ เมื่ออ่านสิ่งนี้กล่าวได้ดี! UITableView สามารถปรับแต่งได้เช่นเดียวกับทุกสิ่งยกเว้นว่าจะหยุดทำงานหากคุณเพิ่มภาพเคลื่อนไหวที่ชดเชยการเข้าคิว ฉันขอแนะนำคำตอบของคุณให้ไปพร้อมกับคู่มือแอนิเมชั่นและบางส่วนก็ขุดเพื่อเรียนรู้ว่ามีมุมมองภายในจำนวนเท่าใดเพื่อให้คุณสามารถรีเฟรชได้และปัญหา "ฉันไม่สามารถทำให้เส้นคั่นมองไม่เห็นได้" ในที่สุดคุณจะพบว่าไม่แปลก ใครก็ได้ มุมมองที่ซ่อนอยู่ใน scrollView, UIButton และ tableView จะปิดการปรับแต่งส่วนใหญ่จนกว่าคุณจะรู้ว่าซ่อนอยู่ในสิ่งต่างๆ
Stephen J

33

สำหรับรายการที่เรียบง่ายและไปข้างหน้า / ถอยหลัง navigtaion UITableViewใช้

ถ้าคุณต้องการระดับสูงของ customisability UICollectionViewใช้

โดยทั่วไปแล้วในการพัฒนาซอฟต์แวร์ควรเลือกแนวทางที่แสดงถึง "สิ่งที่ง่ายที่สุดที่เป็นไปได้"

แก้ไข: ใน iOS 14 UICollectionViewตอนนี้สามารถทำรายการได้เช่นกันและตอนนี้เป็นแนวทางที่แนะนำ ดูเซสชันนี้จาก WWDC20 สำหรับข้อมูลเพิ่มเติมและรายละเอียดการใช้งาน: https://developer.apple.com/videos/play/wwdc2020/10026/


14

ตามมุมมองของฉันความแตกต่างหลักระหว่าง collectionView และ tableView ก็คือ

TABLEVIEW -> แสดงรายการในคอลัมน์เดียวเท่านั้น

COLLECTION-VIEW -> แสดงรายการในหลายคอลัมน์

หวังว่ามันจะช่วยคุณได้


11

หากคุณเลือก UITableView สำหรับ iPhone ตรวจสอบให้แน่ใจว่าคุณได้พิจารณากลยุทธ์ iPad ของคุณก่อน หากคุณต้องการเค้าโครงเฉพาะ iPad คุณอาจต้องการให้เค้าโครงคอลัมน์เดียวนั้นกลายเป็นตาราง


8

แม้ว่าจะไม่จำเป็น แต่ฉันก็ใช้ collectionview เสมอ ด้วยวิธีนี้ฉันสามารถปรับวิธีการนำเสนอคอลเลกชันของฉันสำหรับความละเอียดที่แตกต่างกันได้อย่างง่ายดาย ข้อดีคือพร้อมที่จะเพิ่มเซลล์ประเภทใหม่อย่างรวดเร็วเมื่อทำการปรับโครงสร้างใหม่ในอนาคต

ฉันไม่เห็นมุมมองของตาราง ง่ายมากที่จะใช้มุมมองคอลเลกชันเพื่อแสดงตาราง IMO


4

ขึ้นอยู่กับว่าข้อมูลของคุณจะแสดงอย่างไร ดังที่ได้กล่าวข้างต้นโดยมากถ้าคุณต้องการเพียงชุดเดียวของข้อมูลและที่เกินไปไม่ซับซ้อนไปสำหรับการใช้งานอื่นUITableViewUICollectionView

UICollectionView เป็นมิตรกับการปรับแต่ง

UICollectionViewหากคุณกำลังเผชิญกับความสูงหลายเซลล์หรือมากกว่านั้นไปแล้วสำหรับ


4

จากประสบการณ์ส่วนตัวของฉันควรเปรียบเทียบองค์ประกอบทั้งสองอย่างหลวม ๆ เท่านั้น

TableView

TableView เป็นองค์ประกอบ UI ที่ออกแบบมาเพื่อแสดงข้อมูลในรูปแบบรายการ มีฟังก์ชันบางอย่างที่มาพร้อมกับ UITableView มาตรฐานเช่น:

  • มุมมองอุปกรณ์เสริม
  • รูปแบบการเลือกเซลล์
  • สไตล์การแก้ไข (ปุ่มลบและแก้ไข)

องค์ประกอบข้างต้นช่วยเพิ่มความสามารถในการใช้งานข้อมูลเมื่อแสดงและโต้ตอบในรูปแบบรายการ เช่นการดูอีเมล.

CollectionView

CollectionView เป็นองค์ประกอบ UI ที่ออกแบบมาเพื่อแสดงเนื้อหาโดยใช้เค้าโครงที่กำหนดเอง (โดยปกติจะเป็นสิ่งที่ไม่ใช่รายการ) CollectionViews ปรับปรุงฟังก์ชันการทำงานของการแสดงข้อมูลในรูปแบบเลย์เอาต์ตามความต้องการอย่างสมบูรณ์และยังเปลี่ยนเลย์เอาต์แบบไดนามิกได้ทันที ตัวอย่างบางส่วน ได้แก่ :

  • รายการ Horizonal
  • แกลเลอรี่ภาพ
  • มุมมองภาพขนาดย่อ
  • ม้าหมุน
  • หน้าปัด
  • การจัดวางองค์ประกอบบนแผนที่
  • เป็นต้น

CollectionViews ยังอนุญาตให้มีการเลือกหลายแบบ

สรุป

ดังที่คุณเห็นจากข้างต้นทั้งสองมีกรณีการใช้งานที่แตกต่างกันโดยสิ้นเชิงและได้รับการออกแบบมาเพื่อปรับปรุงการพัฒนาและการใช้งานชุดข้อมูลเฉพาะของตนเอง

หากคุณกำลังมองหาการแสดงสิ่งใด ๆ ในรูปแบบรายการพร้อมกับการโต้ตอบต่อไปนี้: - การเพิ่ม - การลบ - การจัดลำดับใหม่จากนั้น UITableView จะทำให้กระบวนการนี้ง่ายขึ้นโดยให้การสนับสนุนทันที

อย่างอื่นคุณควรใช้ประโยชน์จาก CollectionView เนื่องจากคุณมีความยืดหยุ่นมากขึ้น


2

ทั้งสองอย่างขึ้นอยู่กับข้อกำหนด มุมมองตารางยังรองรับสถานการณ์การแก้ไขที่หลากหลาย ไม่มีการใช้การสนับสนุนนี้ในคลาสมุมมองคอลเลคชัน หากคุณกำลังแปลงจากมุมมองตารางที่อาศัยวิธีการเหล่านี้คาดว่าจะเพิ่มน้ำหนักได้มากขึ้นเล็กน้อยในมุมมองคอลเลคชัน ส่วนหัวของมุมมองคอลเลกชันสามารถวางไว้ที่ใดก็ได้ภายในมุมมอง และ UITableView ไม่จำเป็นต้องตั้งค่าปุ่มด้วยแท็กหรือสิ่งอื่น ๆ โดยรับค่ารายการที่เลือก


1

ในทางปฏิบัติทุกคนใช้ UICollectionView ที่ฉันเจอเมื่อพวกเขาต้องการเพียง UITableView "มันเป็นมิติเดียวมันขึ้น ๆ ลง ๆ ทำไมคุณถึงเพิ่มวิธีการมอบสิทธิ์ที่ไม่จำเป็นสำหรับการจัดวางและข้อมูล" ครั้งหนึ่งฉันใช้เวลาเพิ่มอีก 2 ชั่วโมงในการช่วยเริ่มต้นค้นหาว่าเหตุใด UICollectionViewCell ของพวกเขาจึงล่มสลายเพราะเจ้าของที่ไม่ได้อ่านคู่มือ Animations หรือ HIG หรือคู่มือ UICollectionView ตัดสินใจใช้มันและเพิ่มความสูงและภาพเคลื่อนไหวแบบแปรผัน ไม่จำเป็นต้องพูดเขาปวดหัวกับตัวเองและเสียเวลาไปมากกับปัญหาที่ไม่สำคัญทางธุรกิจที่เขาสามารถหลีกเลี่ยงได้โดยใช้เซลล์ตารางเนื่องจากไม่มีผู้แทนเค้าโครงพิเศษ + Nib

ให้ฉันเข้าใจตรงนี้ฉันคือทั้งหมดสำหรับ UICollectionView เมื่อข้อมูลและการแสดงผลของคุณต้องการ พวกมันมีพลังมาก แต่ในทางปฏิบัติคนส่วนใหญ่ที่ฉันเคยเห็นเคยใช้พวกเขาในรายการ

สิ่งนี้ทำให้เกิดข้อบกพร่องอื่น ๆ นอกจากนี้ยังใช้ในรายการสั้น ๆ คงที่ซึ่งจะไม่มีการเปลี่ยนแปลงเลย ในกรณีนี้ให้สร้าง Xib หรือเขียนมุมมองแบบกำหนดเองที่ซ้อนกัน ทำไม? เนื่องจากคุณไม่ต้องการการจัดการหน่วยความจำสำหรับฉลาก 5 ชุดด้วยปุ่มหรือสวิตช์ หากอาจมีการเปลี่ยนแปลงให้ใช้รายการ หากคุณต้องการฟิสิกส์ UICollectionView ก็ใช้งานได้ดีกับเอฟเฟกต์เจ๋ง ๆ แต่คุณจำเป็นต้องเพิ่มวิธีการมอบหมาย 5 วิธีและระบบเลย์เอาต์สำหรับป้ายกำกับ 5 ป้ายที่จะไม่มีวันย้ายหรือไม่?

นอกจากนี้ฉันไม่ลืมว่า iOS มีมุมมองซ้อนแบบเนทีฟด้วยเช่นกัน ฉันไม่สามารถทำให้มันเสียรูปได้อย่างที่ฉันต้องการแม้ว่าฉันจะค่อนข้างเชี่ยวชาญในระบบ 2D และแอนิเมชั่นดังนั้นฉันจึงไม่เคยใช้ระบบในตัว

ทั้งหมดที่ฉันพูดคือกำหนดความต้องการของคุณ บางทีคุณอาจไม่ต้องการสิ่งเหล่านี้หาก UI ของคุณไม่ได้เพิ่ม / ลบรายการและรีเฟรชตัวเอง หรือบางทีคุณอาจต้องการเขียนเกมไพ่แล้วโยนมันออกมาบนโต๊ะจากนั้นใช้ UICollectionView กับระบบฟิสิกส์เพื่อเป็นแนวทางในการจัดวาง


0

ตามความต้องการของเราเราเลือก TableView หรือ CollectionView

ตัวอย่าง:

สำหรับผู้ติดต่อทางโทรศัพท์ tableView เป็นตัวเลือกที่ดีที่สุด

สำหรับแกลเลอรีรูปภาพมุมมองคอลเลคชันจะเป็นตัวเลือกที่ดีที่สุด


7
ในขณะที่ฉันเห็นด้วยกับวิธีการที่ใส่ไว้ดูเหมือนเป็นความคิดเห็นมากกว่าและฉันคิดว่ามันควรจะเป็นความคิดเห็นไม่ใช่คำตอบ
ป๊อปอาย

0

ฉันมีปัญหานี้ในโครงการปัจจุบันของฉัน ที่จะใช้. ในกรณีของฉันมันง่ายจริงๆ ฉันต้องการทั้งสองอย่าง ฉันต้องการให้มุมมองของฉันดูเหมือน UITableView และต้องเปลี่ยนการเปลี่ยนแปลง / เลย์เอาต์ด้วย ดังนั้นจึงใช้ UICollectionView ฉันยังใช้ UITableView ทุกที่ที่ฉันไม่ต้องการการปรับแต่งเพิ่มเติม เนื่องจาก UiTableView มาพร้อมกับเค้าโครงเริ่มต้นที่มีรูปภาพและข้อความฉันจึงใช้มันเพื่อความเรียบง่าย


0

ตามความต้องการของเราเราเลือกมุมมอง UITableView หรือ UICollection

หากเราต้องการแสดงภาพหรือรายการในประเภทตารางหรือหากต้องการความสามารถในการปรับแต่งเพิ่มเติมเราใช้ UICollectionview

สำหรับการแสดงรายการแต่ละรายการพร้อมรายละเอียดและรายละเอียดย่อยเราใช้ UITableView

UICollectionView: คลาส UICollectionView จัดการชุดข้อมูลตามลำดับและนำเสนอโดยใช้เค้าโครงที่ปรับแต่งได้ มุมมองคอลเลกชันมีฟังก์ชันทั่วไปเช่นเดียวกับมุมมองตารางยกเว้นว่ามุมมองคอลเลกชันสามารถรองรับได้มากกว่าเค้าโครงคอลัมน์เดียว

UITableView:มุมมองตารางแสดงรายการของรายการในคอลัมน์เดียว UITableView เป็นคลาสย่อยของ UIScrollView ซึ่งช่วยให้ผู้ใช้เลื่อนดูตารางได้แม้ว่า UITableView จะอนุญาตให้เลื่อนในแนวตั้งเท่านั้น


0

ตามมุมมองของฉันสำหรับการแสดง Grid View ใช้ UI Collection View มุมมองรายการอื่น ๆ ทั้งหมดใช้มุมมอง UITable


0

โดยส่วนตัวแล้วฉันคิดว่า UICollectionView สามารถทำงานได้เกือบทั้งหมดซึ่ง UITableview สามารถทำได้ ในขณะเดียวกันก็ซับซ้อนกว่าที่จะใช้

ฉันขอแนะนำให้คุณใช้ UICollectionView เป็น TableView ในกรณีที่ผู้จัดการของคุณเปลี่ยนแปลงข้อกำหนดในอนาคต

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.