ความแตกต่างระหว่าง Modal และ Push Segue ในสตอรีบอร์ดคืออะไร?


179

ใครสามารถอธิบายให้ฉันทราบว่าอะไรคือความแตกต่างที่แน่นอนระหว่างmodalและpushทำตาม?

ฉันรู้ว่าเมื่อเราใช้pushsegue จะถูกเพิ่มเข้าไปในสแต็กดังนั้นเมื่อเราใช้ต่อpushไปเรื่อย ๆ

ใครช่วยกรุณาแสดงให้ฉันเห็นว่ามีการนำมาใช้ทั้งสองนี้ได้อย่างไร

Modalสามารถสร้างส่วนย่อยได้อย่างง่ายดายctrl-clickและลากไปยังปลายทาง แต่เมื่อฉันทำเช่นนั้นกับpushแอปของฉันขัดข้อง

ฉันกำลังผลักดันจากปุ่มไปยังที่มีUINavigationControllerUIViewController

คำตอบ:


174

ผลักดัน Segueจะเพิ่ม VC อื่นไปยังกองลูกศร นี่ถือว่าสมมติว่า VC ที่มีต้นกำเนิดการพุชเป็นส่วนหนึ่งของตัวควบคุมการนำทางเดียวกันกับที่ VC ที่ถูกเพิ่มลงในสแต็ก การจัดการหน่วยความจำไม่มีปัญหากับตัวควบคุมการนำทางและสแต็กลึก ตราบใดที่คุณกำลังดูแลวัตถุที่คุณอาจส่งผ่านจาก VC หนึ่งไปยังอีกที่หนึ่งรันไทม์จะดูแลการนำทางกองซ้อน ดูภาพเพื่อดูข้อบ่งชี้: NavStack

กิริยา Segueเป็นเพียงหนึ่งในการนำเสนอ VC VC อีก modally VCs ไม่จำเป็นต้องเป็นส่วนหนึ่งของตัวควบคุมการนำทางและ VC ที่ถูกนำเสนอแบบปกตินั้นถือว่าเป็น "ลูก" ของ VC ที่นำเสนอ (หลัก) โดยทั่วไปแล้ว VC ที่นำเสนอโดยทั่วไปจะใช้แถบนำทางหรือแถบแท็บใด ๆ VC ที่นำเสนอมีหน้าที่รับผิดชอบในการยกเลิกคำสั่ง VC ที่สร้างและนำเสนอ

หวังว่านี่จะช่วยได้


1
@EIJay ขอบคุณสำหรับคำอธิบายที่ดี อีกหนึ่งคำถามเมื่อฉันจะต้องใช้คำกริยาและเมื่อใดที่จะใช้การกดต่อ
Gaurav_soni

43
โดยทั่วไปเมื่อคุณต้องการแสดงมุมมองรายละเอียดของมุมมองสรุปให้ใช้ตัวควบคุมการนำทางและกดกลุ่ม หากมุมมอง "พาเรนต์" ไม่เกี่ยวข้องกันมากเท่าที่ข้อมูลเกี่ยวข้องกับมุมมอง "ลูก" ให้ใช้คำกริยา ตัวอย่างที่ดีสำหรับมุมมองกิริยาจะเป็นมุมมองเข้าสู่ระบบ มุมมองเข้าสู่ระบบไม่มีความสัมพันธ์ใด ๆ กับข้อมูลที่เกี่ยวข้องกับมุมมอง "หลัก"
LJ Wilson

5
@TJ ใช่คุณสามารถสร้าง "model chains" การยกเลิก VC down chain จะยกเลิก VCs ทั้งหมดใน chain - ผู้ใช้จะเห็นการเลิก VC สูงสุดเท่านั้น (เมื่อคุณเปิดใช้งานภาพเคลื่อนไหว) มันเหมือนกับตัวควบคุมทิศทาง
Constantino Tsarouhas

3
@jchatard ใช่ ตราบใดที่ซีคิวของคุณยังเป็นกิริยาช่วยในสตอรี่บอร์ดคุณจะเห็นว่าแถบนำทางไม่ได้รับการถ่ายทอด ดังนั้นเพียงคลิกที่ VC แรกของเชนคำกริยาที่คุณมีแล้วคลิกเมนูตัวแก้ไข -> ฝังใน -> ตัวควบคุมทิศทาง สิ่งนี้จะตั้งค่าให้คุณเป็นตัวควบคุมการนำทางที่จะใช้ร่วมกับห่วงโซ่ modal ทั้งหมดของคุณ ไม่ว่าในขณะนั้นเพียงส่วนต่อท้ายสำหรับการแสดงตัวควบคุมการนำทางคือ "โมดอล" ในขณะที่ส่วนย่อยทั้งหมดภายในห่วงโซ่โมดัลของคุณจะต้องเป็นส่วนย่อย "ดัน"
HpTerm

3
พุชสามารถใช้ได้หาก VC ที่คุณกำลังแยกจากนั้นใช้ตัวควบคุมการนำทาง พยายามที่จะผลักดันจาก VC ที่ไม่ได้ฝังอยู่ในตัวควบคุมการนำทางและมันจะโยนข้อยกเว้น ดังนั้นสิ่งนี้ไม่มีส่วนเกี่ยวข้องกับการเชื่อมโยงข้อมูลระหว่างผู้ปกครองกับลูกอย่างแน่นหนา แต่ก็ต้องทำเพียงแค่ว่าคุณใช้ตัวควบคุมการนำทางเพื่อจัดการ VC ของคุณหรือไม่ คุณสามารถทำสิ่งเดียวกันด้วยตนเองโดยใช้ segues โดยใช้การเปลี่ยนโมดอล
smileBot

22

อัพเดต Swift 3.0 และ XCode 8.2.1

1. กด Segue

Push segue ถูกเปลี่ยนชื่อเป็นShow Segue ในการสร้าง push segue ตัวควบคุมมุมมองพาเรนต์จะต้องถูกฝังในตัวควบคุมการนำทาง ตัวควบคุมการนำทางมีแถบนำทาง เมื่อคุณเชื่อมต่อตัวควบคุมมุมมองสองตัวกับ push segue ตัวควบคุมมุมมองลูกจะมีแถบนำทางด้านบนโดยอัตโนมัติ ตัวควบคุมมุมมองลูกจะถูกเพิ่มที่ด้านบนของกองการนำทาง

ป้อนคำอธิบายรูปภาพที่นี่

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

ป้อนคำอธิบายรูปภาพที่นี่

ในขณะที่คุณได้รับอนุญาตให้สร้างส่วนเสริมพุชจากตัวควบคุมมุมมองที่ไม่ได้อยู่ในตัวควบคุมการนำทางคุณจะสูญเสียคุณลักษณะทั้งหมดเช่นแถบนำทางภาพเคลื่อนไหวท่าทาง ฯลฯ เมื่อคุณทำเช่นนั้น ในกรณีนี้คุณควรฝังตัวควบคุมมุมมองหลักของคุณภายในตัวควบคุมมุมมองการนำทางก่อนแล้วจึงกดส่งต่อไปยังตัวควบคุมมุมมองลูก

ป้อนคำอธิบายรูปภาพที่นี่

2. Segal Modue

ในทางกลับกัน modal (เช่นนำเสนอ modally) จะนำเสนอมากกว่าตัวควบคุมมุมมองปัจจุบัน ตัวควบคุมมุมมองลูกจะไม่สืบทอดตัวควบคุมมุมมองการนำทางดังนั้นแถบการนำทางจะหายไปถ้าคุณนำเสนอการแสดงคำกริยาจากตัวควบคุมมุมมองด้วยตัวควบคุมมุมมองการนำทาง คุณต้องฝังตัวควบคุมมุมมองลูกในตัวควบคุมการนำทางอีกครั้งและเริ่มกองการนำทางใหม่เอี่ยมหากคุณต้องการกลับมา ถ้าคุณต้องการกลับไปที่ตัวควบคุมมุมมองพาเรนต์คุณต้องใช้สิ่งนี้ด้วยตัวเองและโทรdismissจากรหัส

ป้อนคำอธิบายรูปภาพที่นี่

แอนิเมชันสำหรับคำกริยาช่วยสอนคือตัวควบคุมมุมมองย่อยจะปรากฏขึ้นจากด้านล่างของหน้า ตัวควบคุมมุมมองการนำทางยังหายไปในการสาธิตนี้

ป้อนคำอธิบายรูปภาพที่นี่


6

navigationControllerมุมมองการผลักดันจะต้องสร้างขึ้นใน

คลิกที่ของคุณmaster viewจากนั้นในแถบเมนูเลือก:

EDITOR->embed in->navigationController

ผิดpushViewสามารถสร้างได้โดยไม่ต้องnavigationControllerตอบคำถามนี้ไม่สมบูรณ์!
Daksh Gargas

1

นี่คือการผลักดันการควบคุมโดยใช้วิธีการผลักดันที่กำหนดเองและทำต่อสำหรับกระดานเรื่องราว กระดานเรื่องราว

และ Modal เป็นวิธีนำทางผ่านมุมมองโดยไม่ต้องใช้กระดานเรื่องราว


จะสร้าง modal segue โดยไม่ใช้สตอรี่บอร์ดได้อย่างไร
jianpx

@jianpx: คุณสามารถทำต่อได้ก็ต่อเมื่อคุณใช้กระดานเรื่องราว มิฉะนั้นคุณสามารถใช้ Navigation controller หรือ PresentModalViewController เพื่อสลับระหว่างมุมมอง
Pushkraj

@ Pushkraj ขอบคุณ ดังนั้นคุณหมายถึงไม่มีวิธีการสร้างต่อโดยรหัส?
jianpx

@jianpx: ไม่จำเป็น Segue จำเป็นเฉพาะเมื่อใช้กระดานเรื่องราว
Pushkraj
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.