Delegate + Data Source + UITableView

สวัสดีครับผู้ติดตาม Begining iOS Developer ทุกท่าน วันนี้ผมจะมาแนะนำทุกคนให้รู้จักกับ Delegate และ Data Source กันนะครับ โดยใน Entry นี้ผมจะอธิบายพร้อมกับยกตัวอย่างของ UITableView ที่ซึ่งอุดมไปด้วยแนวคิดของ Data Source และ Delegate เลยนะครับ มาเร่ิมกันเลย

ก่อนอื่น ผมขอพูดถึง UITableView ก่อนซักนิดหนี่งนะครับ UITableView ถ้าดูไปแล้วมันก็เหมือนคือ Table หรือตารางนั้นเองครับ ตามชื่อเลย แต่สำหรับ UITableView ที่อยู่บน iOS จะมีข้อจำกัดคือมีแค่ 1 Column และมีได้หลาย Row หลาย Section (ส่วนรายละเอียดผมจะพูดถึง UITableView อีกครั้งใน Entry ต่อๆ ไป) เอาละครับเมื่อเรารู้ว่า UITableView คือ Table แล้วส่ิงที่ Table ต้องมีละคือะไร สิ่งที่ Table จะต้องมีคือ จำนวน Row ครับ และข้อมูลที่อยู่ในแต่ละ Row โดยทั้งหมดนี้เราจะเรียกว่า Data Souce

ส่วน Delegate ถ้าแปลตามตัวจะหมายถึง ตัวแทน ตัวแทนในที่นี้ก็คือเป็นตัวที่ทำหน้าที่เมื่อมีการทำ Action อะไรกับ ข้อมูลใน Table ของเรา เช่นเมื่อ User เลือกที่ Row ใด Row หนึ่งของ Table เราก็จะรู้ได้แล้วว่ามี Action เกิดขึ้น จากนั้นเมื่อเราต้องการให้ทำ Action อะไรต่อ ก็จัดการได้ที่ส่วนของ Delegate ของ UITableView นี้

จาก Sample Code ผมจะสร้าง SampleTableView ขึ้นมา

Data Source

// Data Source ของ UITableView
1.จำนวน Row

– (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return 5;
}

2.ข้อมูลที่อยู่ใน Row ซึ่งจะเรียกว่า Cell
– (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
return cell;
}

Delegate

// Delegate ของ UITableView
– (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// More Action
}

Conclusion
Data Source คือ ข้อมูลที่จะถูกเก็บลงใน Table ซึ่งเราต้องรู้ว่ามีข้อมูลเท่าไร อะไรบ้าง
Delegate คือ ส่ิงที่รอกระทำเมื่อมีเหตุการณ์บางอย่างเกิดขึ้นมา เช่น เมื่อ Table ถูก Select ก็จะส่งไปที่ Delegate ของ UITableView จากนั้นเราต้องการทำอะไรต่อก็จะมาที่ Delegate ของ UITableView

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s