Posts

Showing posts with the label uitableview

Cell Registration & Dequeuing with Swift Features

Image
ถ้าบอกว่าคลาสใน UIKit ตัวไหน ที่เราใช้กันบ่อยมากที่สุด ก็คงจะหนีไม่พ้น UITableView และ UICollectionView นั่นแหละนะ และงานที่เราต้องทำกันบ่อยๆ นอกเหนือจากการ Custom Cell ให้เป็นรูปแบบที่เราต้องการ ถ้า Cell ที่เราสร้างขึ้นอาจจะมีการนำมาใช้ใหม่ สิ่งที่เราต้องทำคือ สร้าง XIB file ขึ้นมาและก็ต้อง Register ให้รู้ด้วยว่าจะมี Cell อีกรูปแบบเข้ามาในระบบ คราวนี้มาดูเวลาเราเขียนโค้ดแบบปกติกันก่อน ว่าที่ผ่านมา ผมและหลายๆ คนทำกันยังไง เริ่มจาก UITableView และ UICollectionView นั้นมี API ที่เอาไว้ให้เรา Register Cell ดังนี้ Wait for the Code .... และวิธีการเขียน Datasource โดยทั่วไปก็จะเขียนกันแบบนี้ โดยอ้างถึง Reuse Identifier ด้วยค่าคงที่ที่ประกาศไว้ด้านบน Wait for the Code .... คราวนี้เราจะมาลองดูกันว่า เราจะทำให้โค้ดชุดนี้เรียบง่าย และปลอดภัยขึ้นได้อย่างไร ด้วยการใช้ Feature ของ Swift นั่นคือ Generics และ Protocol Extension เริ่มจาก ปกติแล้วผมก็จะตั้ง Reuse Identifier ตามชื่อ Cell Class (Nib File) นั่นแหละ เช่น Class ชื่อ BookCell ก็ตั้งว่า BookCell  ในเ...

[iOS Dev] Dynamic Height of UITableViewCell

Image
เพื่อความสวยงามในการแสดงผล UITableViewCell วันนี้จะมาพูดถึง Dynamic Height of UITableViewCell ซึ่งก็น่าจะใช้กันบ่อยๆ :) ในกรณีนี้จะต้อง Custom Cell นะครับ และไม่มีการใช้ Auto Layout ซึ่งใช้ได้กับทั้ง 2 วิธี (Prototype Content, Custom Cell with Nib File) ตัวอย่างเช่น Comment ใน Youtube แล้วกัน นึกภาพว่า นี่คือ UITableView นะครับ จะเห็นได้ว่าแต่ละบรรทัดมี Element เหมือนกันหมด แต่ขนาดพื้นที่ของแต่ละ Cell ต่างกัน เนื่องจาก Content ของแต่ละ Cell มีความยาวไม่เท่ากัน ถ้าเราไม่ทำ Dynamic Height ก็จะทำให้เกิดการตัดประโยคเป็น "..." ตาม Style ของ iOS แล้วจะแก้ปัญหานี้ยังไงดี ... สิ่งที่ผมจะแนะนำคือคำตอบ โดย iOS มี API ที่จะคำนวณขนาดจาก String ที่เราต้องการอยู่แล้ว ลองคิดตามนะ สมมติว่า Element ในแต่ละ Cell มีแค่ (จากตัวอย่าง) ชื่อคนคอมเมนท์ และ คอมเมนท์ ขนาดของ Cell นั้นๆ จะ == (sizeOf(ชื่อ) + sizeOf(คอมเมนท์)) + Space Offset นิดหน่อย วิธีการ Coding ก็คือ ผมจะมี Comment Model ที่สร้างขึ้นมา ก็ใช้ Model นี่แหละครับ ในการคำนวณ โดยจะสร้าง Property เพิ่มขึ้นมาอีก ...

[iOS Dev] Insert and Delete Data in TableView (No Core Data)

Image
วันนี้ผมขอเสนอ Case Study ง่ายๆ ในการบอกแนวคิดในการ Insertion และ Deletion ข้อมูลใน TableView นะครับ ข้อมูลที่ใช้ในโจทย์ข้อนี้จะเป็นแค่ NSMutableArray เท่านั้น (แต่ถึงเวลาจริงๆ งานจริงๆ จะใช้ Core Data) เป็น Project เล็กๆ ที่ทำทุกอย่างใน Controller นะครับ ... DeletingTableViewViewController.h ในไฟล์ .h ก็ไม่มีอะไรมากนะครับ .. มี List ของข้อมูลซึ่งเป็น NSMutableArray และตัวแปรที่จะอ้างถึง TableView เพื่อทำการ reloadData ** แต่เราสามารถสร้าง ViewController ให้เป็น UITableView SubClasses ได้เลยครับ      ถ้าทำแบบที่ว่า เราจะสามารถใช้ self.tableView ได้ทันที ... แต่กรณีนี้ผมสร้าง Project แบบ      SingleView Application จึงต้องทำการสร้าง UITableView เอง DeletingTableViewViewController.m ในไฟล์ .m ส่วนแรก ก็ไม่มีอะไรมากนอกจากตั้งค่าเริ่มต้นให้กับข้อมูล และ ตั้งค่า UI ตอนเริ่มต้น โดยเพิ่ม UITableView ไปใน View และเพิ่มเติมอะไรนิดหน่อยที่ updateUI method ส่วนต่อไปคือ DataSource Method ของ UITableView ที่เราเรียกใช้ ซึ่งในส่วนแรก เป็นแค่การเร...