Swift 3: Unwind Segues

จุดประสงค์ของบล็อคนี้ . . คือ . . กันผู้เขียนลืมนั่นเอง -.-
แต่ไหนๆ ก็กันลืมแล้ว เลยเขียนเป็นบล็อค เผื่อมีผู้อื่นสนใจด้วยเลยแล้วกัน


แล้ว Unwind นี่คืออะไรล่ะ?

ถ้าในโปรเจ็ค เราสร้าง view ทั้งหมดไว้บน Storyboard 
การเปลี่ยนหน้าระหว่าง scene แบบเดินไปข้างหน้าเรื่อยๆ จะเรียกว่าการทำ seque
ส่วนการกลับ scene ไปยัง scene ก่อน ก่อน หน้า ก็เรียกว่า unwind นั่นเอง

เรามาดูตัวอย่างเพื่อความเข้าใจมากขึ้นกัน

ในตัวอย่างนี้ เรามีด้วยกันทั้งหมด 3 หน้า
1. TableView (V1)
2. ViewController (V2)
3. CollectionView (V3)

ถ้าเราต้องการเปลี่ยนหน้าจาก V1 ไป V2 และ กลับมา V1 
ก็จะถือว่า การเปลี่ยนหน้าเป็นเรื่องปกติ ง่ายๆใช่ไหม 
เพียงแค่เราอาจจจะใส่โค้ดตามนี้

self.dismiss(animated: true, completion: nil)
หรือ
_ = self.navigationController?.popViewController(animated: true)

แต่ถ้า เรากดจาก V1 ไป V2 ไป V3 
แล้วอยากจะให้ V3 ย้อนกลับไป V1 ทันทีละ เราจะทำอย่างไร?

นี่แหละ ประโยชน์ของ unwind มันอยู่ตรงนี้นี่เอง

โดยขั้นตอนของมันก็ง่ายๆเลย ประกอบไปด้วย ทั้งหมด 3 ขั้นตอน

1. ในหน้า V1 หรือ หน้าที่เราต้องการที่จะ unwind กลับมา ให้ใส่ func ตามนี้

@IBAction func unwindToTableViewWithSegue(segue:UIStoryboardSegue){}

2. บน Storyboard ของ V1 หรือ หน้าที่เราต้องการที่จะ unwind กลับมา
ให้ set ตามนี้

ลาก ViewController icon ไปใส่ Exit icon จะเจอกับชื่อ method ที่เราสร้างไว้
จัดการเชื่อมไปโล้ดดดด

ถ้าถูกต้องตรง document outline คุณจะพบว่า มี Unwide segue ขึ้นมาเรียบร้อย
และให้คุณใส่ชื่อ identifier ตามต้องการ

3. ในหน้า V3 หรือ หน้าที่เราต้องการจะให้มีการ unwind

ลาก ViewController icon ไปใส่ Exit icon จะเจอกับชื่อ method ที่เราสร้างไว้
จัดการเชื่อมไปเช่นเดิม และทำการใส่ identifier ให้ตรงกับข้อ 2.

และในตัวอย่างนี้ผู้เขียนต้องการจะให้ action ของการกดปุ่ม Home คือการ unwind กลับไปหน้า V1 นั่นเอง

ดังนั้น ผู้เขียนจึงทำการเชื่อมและประกาศ func ตามนี้

และใน func ก็จะประกอบด้วยโค้ดของการ unwind นั่นเอง

@IBAction func goBackToTableView(_ sender: Any) {
performSegue(withIdentifier: “unwindToTableViewWithSegue”, sender: self)
}

ชื่อใน “ ” คือชื่อที่เราใส่ใน identifier ไปนะคะ
เพียงเท่านี้ก็เป็นอันเรียบร้อย เรามาดูผลลัพธ์กันค่ะ

ตัวอย่างนี้จะประกอบไปด้วย การ Back หน้าแบบปกติ และการ Back แบบ Unwind นะคะ

ref: https://medium.com/@mimicatcodes/create-unwind-segues-in-swift-3-8793f7d23c6f
special thanks: WisdomLanna api dev, Themoviedb api