Xcode 4.2 : Storyboard Segue # 2


Xcode 4.2 : Storyboard Segue # 2
การใช้งาน Storyboard Segue ตอนที่ 2

ต่อจากบทความที่แล้วนะครับ เรื่องของการใช้งาน Storyboard Segue ใน Xcode 4.2 เราจะมาดูวิธีการส่งค่าจากหน้า View Controller แรกไปหน้า View Controller ที่สอง มันจะทำยังไงน๋อ

เรามาดูวีดีโอตัวอย่างกันสักหน่อยดีกว่า

อธิบายเพิ่มเติม

ในบทความนี้เราจะได้เรียนรู้เพิ่มเติมเกี่ยวกับการใช้งานฟังก์ชั่น performSegueWithIdentifier และ ฟังก์ชั่น prepareForSegue นะครับ

ข้อควรจำ

ฟังก์ชั่น performSegueWithIdentifier เอาไว้ใช้เรียกใช้งาน Segue ที่เราสร้างขึ้นใน storyboard

ฟังก์ชั่น prepareForSegue นั้นใช้สำหรับส่งค่าไปยัง หน้า ViewController ปลายทาง ดังตัวอย่างนะครับ


//seeDetail เป็นฟังก์ชั่นที่รับอีเวนท์ที่เกิดจากการกดปุ่ม

- (IBAction)seeDetail:(id)sender {

//เปลี่ยนไปยังหน้าถัดไป

//sender ตัวนี้ที่ส่งไปคือ ปุ่มที่เรากดนั้นเองนะครับ

[self performSegueWithIdentifier:@"line1" sender:sender];

}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{

//เรามาดูกันดีกว่าว่า มันส่งพารามิเตอร์อะไรมาให้เราบ้าง และเราใช้ประโยชน์อะไรได้บ้างนะครับ

//segue : ตัวที่ส่งมาคือ segue ตัวนี้เราสามารถใช้งาน propertyต่างๆ ของมันได้ ได้แก่

/*

identifier คือชื่อที่เราระบุไว้ตอนอยู่ที่หน้า storyboard

source      คือหน้า ViewController หน้าปัจจุบัน

destination คือหน้า ViewController ที่ segue จะเปลี่ยนไปเป็นหน้านั้น

*/

//sender : ตรงนี้เราจะส่งอะไรมาก็ได้ เพราะพารามิเตอร์เป็น (id) แต่ในที่นี้เราส่ง ปุ่มที่ถูกกดเข้ามา ดังนั้นเราจะได้ชื่อปุ่ม นั้นเอง

//การตรวจสอบว่าเป็น segue ไหน จาก identifier

//เราตั้งชื่อ segue ที่จะใช้ว่า line1 จำได้มั้ย???

if([segue.identifier isEqualToString:@"line1"]){

//segue.sourceViewController = source ที่อธิบายไปแล้ว

//segue.destinationViewController = destination ก้ออธิบายไว้แล้วเช่นกัน ตอนนี้เราจะส่งค่าไปที่ destination

//จำเป็นต้องเปลี่ยนเป็น Page2 ด้วยเนื่องจาก destinationViewController นั้นเป็น id (อะไรก็ได้)

Page2 *p = (Page2*)segue.destinationViewController;

//เราจะส่งค่า ชื่อของปุ่มไปให้กับ Page2 แล้ว แต่ใน Page2 ต้องมี ตัวแปรเอาไว้รับค่าด้วยเช่นกัน

//ส่งชื่อปุ่มไปให้หน้าต่อไป

p.bName = ((UIButton*)sender).titleLabel.text;

}

}

ตอนนี้เราได้แต่เพียงส่งค่าตัวแปรไปยังอีกหน้าถัดไปเท่านั้นนะครับ เราไม่ได้เขียนเปลี่ยนค่า UI ในหน้าถัดไปเลย เพราะเนื่องจากฟังก์ชั่น prepareForSegue เนี่ย ทำก่อนฟังก์ชั่น viewDidLoad ของหน้าต่อไปนั้นเอง ดังนั้นในหน้าถัดที่เราส่งค่าไป เราจึงต้องทำการเปลี่ยนค่า UI ในฟังก์ชั่น viewDidLoad ด้วยค่าตัวแปรที่หน้าแรกส่งมาให้ ดังนี้


- (void)viewDidLoad {

[super viewDidLoad];

//set Title

nText.text = bName;

//set Image

//ต้องต่อ ข้อความ String ด้วย .png ด้วยนะครับ เพราะต้องเอาชื่อภาพแบบเต็ม

nImage.image = [UIImage imageNamed:[bName stringByAppendingFormat:@".png"]];

}

เราก้อจะสามารถส่งค่าจากหน้าหนึ่งไปยังอีกหน้าหนึ่งได้แล้วครับ สรุปขั้นตอนง่ายๆ มีอยู่ว่า

  1. เราต้องเรียก Segue ที่เราสร้างใน storyboard เสียก่อน ด้วยฟังก์ชั่น performSegueWithIdentifier
  2. ส่งค่าไปที่หน้าปลายทางในฟังก์ชั่น prepareForSegue ด้วยค่า segue.destinationViewController
  3. ในหน้าปลายทาง ในฟังก์ชั่น viewDidLoad เราก็นำค่าที่ส่งจากหน้าที่แล้วมา ให้ค่ากับ UI ของเรา ก็เป็นอันเรียบร้อย

เป็นอย่างไรบ้างครับ สำหรับการใช้งาน Segue ในการส่งค่าจากหน้าหนึ่งไปยังหน้าหนึ่ง นั้นไม่ยากเลยใช่มั้ยครับ หากเพื่อนๆ มีข้อสงสัย หรืออยากทราบอะไรเพิ่มเติมเกี่ยวกับการใช้งาน Storyboard Segue ก้อคอมเม้นที่ด้านล่างได้เลยนะครับ แต่บทความสำหรับ Segue ยังไม่หมดเพียงเท่านี้นะครับ ติดตามกันต่อไปนะครับ :)

บทความที่เกี่ยวข้อง

adaydesign :)

About adaydesign

นักพัฒนาแอพพลิเคชั่นบนโมบาย [iPhone Android] คนหนึ่งซึ่งอยากจะบันทึกเรื่องราวของเส้นทางนักพัฒนาโมบายแอพพลิเคชั่นเอาไว้ในบล็อคน้อยๆ แห่งนี้ เผื่อจะแบ่งบันและแลกเปลี่ยนความรู้ให้กับคนอื่นๆ ได้บ้าง :) Mobile Application Developer; Flash Mobile, iPhone/iPad, Android Mobile Phone/Tablet and Blackberry Playbook.

Posted on ธันวาคม 13, 2011, in [Dev] iOS and tagged , , , , , . Bookmark the permalink. 1 ความเห็น.

  1. ขอโทษค่ะ พอดีลองทำตามแล้วมันขึ้น error อย่างนี้อ่ะค่ะ
    หมายความว่ายังไงหรอคะ? ทำตรงไหนผิดหรอคะ?

    ขอบคุณค่ะมากค่ะ

    Terminating app due to uncaught exception ‘NSUnknownKeyException’, reason: ‘[ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key Back.’
    *** First throw call stack:
    (0x13ba052 0x154bd0a 0x13b9f11 0x9b1032 0x922f7b 0x922eeb 0x93dd60 0x23091a 0x13bbe1a 0x1325821 0x22f46e 0xd6e2c 0xd73a9 0xd75cb 0xe058c 0xdb3e8 0x2f4cc5 0xde427 0xde58c 0xde5cc 0x4416b6 0x435e30 0xd81db 0x2c5a 0x13bbec9 0x145c2 0x1455a 0xb9b76 0xba03f 0xb92fe 0x39a30 0x39c56 0x20384 0x13aa9 0x12a4fa9 0x138e1c5 0x12f3022 0x12f190a 0x12f0db4 0x12f0ccb 0x12a3879 0x12a393e 0x11a9b 0x26c8 0x2625 0x1)
    terminate called throwing an exceptionsharedlibrary apply-load-rules all
    Current language: auto; currently objective-c

ใส่ความเห็น

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 / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s

%d bloggers like this: