วันพฤหัสบดีที่ 1 พฤศจิกายน พ.ศ. 2555

Xcode Programming XII : Custom TableViewCell

โดยปกติแล้ว Xcode จะมีการกำหนด รูปแบบของ Cell ใน TableView ให้มาแล้ว 4 รูปแบบซึ่งแต่ละรูปแบบก็จะมีหน้าตาแตกต่างกันออกไป ซึ่งเราได้ทราบกันไปแล้วนะครับในบทความก่อน ๆ และคราวนี้เราจะมาทำความเข้าใจเกี่ยวกับการปรับแต่ง Cell ให้เป็นไปตามที่เราต้องการกันครับ


  • New Project  >> Single View Application  
  • สร้าง TableView

ตรงนี้ก็เป็นการสร้าง TableView ขึ้นมาปกตินะครับ ใครยังทำไม่ได้ให้ลองไปตามอ่านในบทความเก่าๆ ดูนะครับ แต่ผมจะอธิบายวิธีการคร่าวๆ ให้นะครับ

  1. ลาก UITableView Object มาใส่ใน .xib
  2. เพิ่ม Protocol  < UITableViewDataSource, UITableViewDelegate >
  3. @synthesize / - (void) dealloc
  4. นำ Required method มาใส่ใน ViewController.m
  5. เชื่อม Object ที่สร้างกับ UI ใน .xib


คงจะยังจำกันได้นะครับ หวังว่าคงทำกันได้ไม่ยากครับ

  • New file UIViewController with XIB


เลือก Subclass เป็น UIViewController นะครับ เราจะไม่ใช้ Subclass UITableViewCell เพราะว่าถ้าเราใช้ UIViewController เราสามารถ เอา XIB ได้ด้วย ซึ่งหากเราเลือกเป็น UITableViewCell เราก็จะต้องเพิ่ม XIB File อีกทีนึงครับ 

  • ไปที่ Xib >> ลบ Object View ทิ้ง
  • นำ Object TableViewCell มาใส่ใน Xib 




  • ปรับแต่ง TableViewCell ตามต้องการ
ของผมใส่ UIImageView ไป 4 Object นะครับ

  • สร้าง Object สำหรับเชื่อมต่อกับ Xib
แก้ไข Code ใน CustomCell.m อย่าลืมเปลี่ยนส่วนที่ขีดเส้นใต้จาก UIViewController เป็น UITableViewCell
  • แก้ไข Code ใน CustomCell.m ให้เป็นดังนี้

เหลือแค่นี้เท่านั้น
สังเกตได้ว่าเราได้ทำการลบส่วนของ @interface และ Method อื่นๆออกทั้งหมดเพราะว่าเราต้องการสร้าง TableViewCell ที่จะถูกเรียกพร้อมกับ mainTableView ซึ่งไม่จำเป็นต้องมาใช้งานในส่วนที่เราได้ลบออกไป 

  • สร้าง Object ของ Class CustomCell ไว้ใน Class ViewController โดยการเพิ่ม Code ต่อไปนี้

ViewController.h

#import "CustomCell.h"

@property (nonatomic, strong) IBOutlet CustomCell *customcell;

ViewController.m

@synthesize customcell =  _customcell;
[_customcell release];


  • แก้ไข CustomCell.xib ดังนี้

แก้ไขให้ xib อ้างอิง Class ให้ถูกต้อง

เชื่อมต่อ Code กับ Interface

แก้ไขให้ File's Owner อ้างอิง Class ให้ถูกต้อง



 ขั้นตอนที่ผ่านมาอย่างที่อธิบายไปแล้วนะครับว่าเป็นการอ้างอิง Interface กับ Class ให้ถูกต้องครับ ผมจะพยายามอธิบายโดยละเอียดให้อีกทีนะครับ
  1. เราสร้าง Objective C-Class เป็น UIViewControll เพราะเราต้องการ .XIB 
  2. หลังจากนั้นเราก็ต้องแก้ไขให้มันเป็น UITableViewCell  โดยการไปแก้ไขใน CustomCell.m ในส่วนที่ได้ทำการขีดเส้นใต้ไว้ด้านบน
  3. จากนั้นก็ไปทำให้ Interface ของ CustomCell อ้าง Class ให้ถูกต้องและไปอ้างอิงให้ File's Owner อ้างอิงไปยัง ViewController Class เพราะ CustomCell ที่เราสร้างขึ้นใหม่นั้น เราต้องการให้เป็น Cell ของ UITableView ใน ViewController นั่นเอง

จริงๆ แล้วในส่วนนี้เราไม่จำเป็นต้องสร้าง Class ใหม่มาก็ได้นะครับ สามารถใช้เพียง mainViewController ในการสร้าง CustomViewCell ก็ได้ แต่มันจะไม่ยืดหยุ่นเท่าที่ควรครับ

  • แก้ไข Code ใน Method CellForRowAtIndexPath เป็นดังนี้


ของเก่าผมได้ทำการ // เพื่อ Comment เอาไว้เปรียบเทียบระหว่าง Code ใหม่กับ Code เดิมเพื่อให้ทำความเข้าใจกันนะครับ

## อธิบาย Code ##


static NSString *MyIdentifier = @"CustomCell";

CustomCell *cell = (CustomCell *) [tableView dequeueReusableCellWithIdentifier : MyIdentifier]; 

สองส่วนนี้ผมได้อธิบายเอาไว้แล้วในตอนพิเศษของ TableView ครับแต่เปลี่ยนมาใช้ Cell ที่อ้างอิงจาก Class CustomCell แทน  

[[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];

เป็นการเรียก CustomCell.xib ครับ

cell = self.customcell;
self.customcell = nil;

ให้ CustomCell.xib มาแสดงผลให้ mainTableView

คราวนี้เราก็สามารถปรับแต่ง CustomCell ได้แล้วครับ



ของผมครับ ^ ^
สังเกตได้ว่า รูปที่ผมตั้งค่าไว้มันล้นออกมาจาก Cell เราสามารถใช้ Method ด้านล่าง เพื่อกำหนดความสูงของ Cell ได้ตามต้องการครับ


บทความนี้เยอะได้คงไม่ยากเกินไปครับ ลองดูครับ

ไม่มีความคิดเห็น:

แสดงความคิดเห็น