![]() |
แต่ละ Cell ยังสามารถใส่ Object ต่างๆ ได้อีก |
UITableView ทำงานโดยมีการใช้งาน Helper Object เข้ามาช่วยคือ Data source รวมไปถึง Delegate แล้วสิ่งเหล่านี้มันคืออะไร ?
Delegate เป็นส่วนที่ช่วยเกี่ยวกับการจัดการเพื่อตอบสนองต่อ Event ต่างๆ โดยที่เราไม่จำเป็นที่จะต้อง เขียนคำสั่งขึ้นมาเพื่อที่จะเรียกใช้ Delegate Method เหล่านั้นเลย ตัวอย่างนะครับ เช่น เรากำลังเล่นเกมส์บน iPhone อยู่แล้วเกิดมีโทรศัพท์ เข้ามา iOS จะแสดง Display สายเรียกเข้าขึ้นมาแล้วจะจัดการให้ Application ที่กำลังใช้งานเข้าสู่ Background Mode แต่เราจะจัดการ Application นั้นอย่างไรเมื่อเกิด Event แบบนี้ ส่วนตรงนี้แหละครับที่ Delegate จะเป็นผู้ช่วยจัดการในส่วนนี้ เช่น ให้เกมส์อยู่ในสถานะ Pause ก่อนที่จะเข้าสู่ Background Mode ครับ
UITableView จะแบ่ง Helper Object ออกเป็น 2 ประเภทครับ คือ Data source และ Delegate นั่นเองครับ
UITableViewDataSource
เป็นตัวช่วยด้านข้อมูลต่างๆที่จะนำมาแสดงผลใน TableView โดยหากเรามีการใช้งาน TableView แล้วจำเป็นที่ต้องมี Method บังคับได้ที่ได้บอกไปในบทความที่แล้ว ดังนี้
- (NSInteger) tableView : (UITableView *) tableView numberOfRowsInSection : (NSInteger) section {
return 10; }
แสดงจำนวนแถวที่ต้องการจะแสดงในแต่ละ Section ใน TableView
- (UITableViewCell *) tableView : (UITableView *) tableView cellForRowAtIndexPath :(NSIndexPath *) indexPath {
static NSString *MyIdentifier = @"MyIdentifier";
// Try to retrieve from the table view a now-unused cell with the given identifier.
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier : MyIdentifier];
// If no cell is available, create a new one using the given identifier.
if (cell == nil) {
// Use the default cell style.
cell = [[[UITableViewCell alloc] initWithStyle : UITableViewCellStyleSubtitle
reuseIdentifier : MyIdentifier] autorelease];
}
// Set up the cell.
cell.textLabel.text = @"text";
cell.detailTextLabel.text = @"detail";
return cell;
}
static NSString *MyIdentifier = @"MyIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier : MyIdentifier];
กำหนดให้ Cell ใน TableView มีคุณสมบัติ DequeueReuseable เนื่องจากใน iPhone ทรัพยากรของระบบมีจำนวนจำกัด ดังนั้นทาง Apple เองจึงได้ ออกแบบให้ Cell ที่ยังไม่ถูกนำมาแสดงผลในหน้าจอยังคงมีการ Dequeue ไว้เพื่อนำกลับมาใช้ใหม่ได้ โดยที่ไม่ต้องทำการจองพื้นที่และคืนค่าให้กับทางระบบบ่อยๆ เพื่อประสิทธิภาพในการบริหารจัดการหน่วยความจำของระบบนั่นเอง
cell = [[[UITableViewCell alloc] initWithStyle : UITableViewCellStyleSubtitle
reuseIdentifier : MyIdentifier] autorelease];
เป็นการกำหนดรูปแบบของ Cell ใน TableView นั่นเอง
UITableViewDelegate
เป็นตัวช่วยสำหรับจัดการ TableView เมื่อเกิดเหตุการณ์ต่างๆ นั่นเองครับ
เพื่อให้เข้าใจมากขึ้น บทความหน้าเราจะมาทดลองใช้ Helper Object อื่นๆ ที่น่าสนใจเกี่ยวกับ TableView เพิ่มเติมกันครับ
ไม่มีความคิดเห็น:
แสดงความคิดเห็น