Xcode 4.5 Storyboard 'ออก'


102

ฉันเพิ่งติดตั้ง Xcode 4.5 สำหรับการรองรับ iOS6 และฉันเห็นไอคอนใหม่ชื่อ 'Exit' ใน Storyboard ของฉันซึ่งแสดงอยู่ภายใต้ตัวควบคุมมุมมองของฉันพร้อมกับ 'First Responder' เป็นต้นไอคอนสีเขียวเล็ก ๆ ที่มีชื่อว่า 'Exit'

ฉันไม่สามารถหาอะไรก็ได้ในนั้นหรือหาวิธีใช้ไม่ได้

ใครรู้อะไรเกี่ยวกับเรื่องนี้วิธีการทำงานมีไว้เพื่ออะไร?


1
ในคำถามที่คล้ายกันฉันโพสต์คำตอบนี้: stackoverflow.com/questions/12569316/… ช่วยอธิบายวิธีใช้คุณสมบัติ exit (คลาย)
Eric

คำตอบ:


72

สิ่งนี้เรียกว่า " Unwind Segue " น่าเสียดายที่ยังไม่มีเอกสารสำหรับเรื่องนี้ยกเว้นการกล่าวถึงสั้น ๆ เกี่ยวกับรายการคุณสมบัติใหม่ของ XCode 4.5 ที่ระบุ:

การผ่อนคลายสามารถทำให้สามารถเปลี่ยนไปใช้ฉากที่มีอยู่ในสตอรีบอร์ดได้

ข่าวดีก็คือมีช่วงหนึ่งจาก WWDC 2012 ที่อธิบายสิ่งมีชีวิตเหล่านั้น (เหนือสิ่งอื่นใด)

คุณสามารถลงชื่อเข้าใช้ iOS Dev Center ของ Apple ด้วยรายละเอียดบัญชีนักพัฒนาของคุณจากนั้นไปที่หน้าวิดีโอ WWDC 2012และดู "การนำ Storyboard มาใช้ในแอปของคุณ" (เป็นลำดับที่ห้าจากด้านบน) การสนทนาเกี่ยวกับการผ่อนคลายเริ่มต้นเวลา 37:20 น. .


อัปเดต: นี่คือข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้จากเอกสารของ Apple

อ็อบเจ็กต์ตัวยึดชื่อ Exit สำหรับการคลายลำดับ โดยค่าเริ่มต้นเมื่อผู้ใช้ปิดฉากย่อยตัวควบคุมมุมมองสำหรับฉากนั้นจะคลาย (หรือกลับ) ไปที่ฉากหลักนั่นคือฉากที่เปลี่ยนไปเป็นฉากย่อยในตอนแรก อย่างไรก็ตามอ็อบเจ็กต์ Exit ช่วยให้ตัวควบคุมมุมมองคลายตัวไปยังฉากโดยพลการ

(จาก iOS6 docset> ทั่วไป> เริ่มต้นใช้งาน)

และนี่คือตัวอย่างที่ดีในการใช้งาน


การอัปเดตอื่น ๆ :

นี่คือหมายเหตุทางเทคนิคจาก Appleเกี่ยวกับหัวข้อนี้


3
ตกลงคุณจะใช้มันอย่างไร? พยายามคลิกควบคุมจากวัตถุออกที่ด้านล่างของตัวควบคุมวิว แต่จะไม่เชื่อมโยงกับสิ่งใดเลย
ชิม

4
โดยพื้นฐานแล้วคุณจะต้องกำหนดวิธีการสำหรับการทำต่อแบบคลายของคุณจากนั้นเชื่อมต่อจากองค์ประกอบไปยังexitปุ่มเพื่อเลือกวิธีที่คุณต้องการโทร คุณสามารถดูตัวอย่างได้ที่นี่ (ฉันได้อัปเดตคำตอบของฉันเช่นกันเพื่อรวมตัวอย่าง)
Alladinian

1
-1: คำมากมายข้อมูลที่เป็นประโยชน์เล็กน้อย หลังจากอ่านสิ่งนี้และใช้มันในแอพของฉันฉันเขียนคำตอบนี้ขึ้นมาซึ่งหวังว่าจะมีประโยชน์มากขึ้น: stackoverflow.com/a/25829835/901641
ArtOfWarfare

1
นี่คือเหตุผลที่ฉันชอบเอกสารที่ไม่มีอยู่จริงของ Apple ผู้ชายคนหนึ่งควรถูกไล่ออกที่นั่น
เป็ด

@SpaceDog บางทีนั่นอาจเป็นสิ่งที่เกิดขึ้นพวกเขาทั้งหมดถูกไล่ออกและไม่มีใครเหลือให้เขียนเอกสาร: / ฉันชอบวิดีโอ WWDC แม้ว่าปี 2012 จะเป็นปีที่ Apple ถึงจุดสูงสุด
turingtested

10

สมมติว่าคุณมีลำดับการดูในสตอรีบอร์ดของคุณ:

A -> ... -> Z

คุณต้องการที่จะมีปุ่มบนมุมมองซึ่งจะช่วยให้ผู้ใช้ไปทั้งหมดกลับวิธีการZA

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

Obj-C:
ในAอินเทอร์เฟซ (ไม่ใช่Zของ):

- (IBAction)cancelSignup:(UIStoryboardSegue *)unwindSegue;

ในAการนำไปใช้งาน (ไม่ใช่Zของ):

- (IBAction)cancelSignup:(UIStoryboardSegue *)unwindSegue {
    // Only "implemented" to satisfy a respondsToSelector: search.
    // You can actually implement more stuff here, if you want, IE, if
    // you need to reach out to a server to mention that this screen was
    // returned to from a later screen.
}

Swift:
ในAแหล่งที่มาของ (ไม่ใช่Zของ):

@IBAction func cancelSignup(unwindSegue: UIStoryboardSegue) {
    // Only "implemented" to satisfy a respondsToSelector: search.
    // You can actually implement more stuff here, if you want, IE, if
    // you need to reach out to a server to mention that this screen was
    // returned to from a later screen.
}

ตอนนี้ภายในสตอรี่บอร์ดของคุณcontrolลากจากองค์ประกอบบนZ(IE, ปุ่มยกเลิก) เพื่อ'sZ Exitมันจะสแกนผ่านมุมมองทั้งหมดที่อยู่ในลำดับชั้นของมุมมองที่สูงขึ้นซึ่งมีมุมมองIBActionที่ยอมรับเพียงรายการเดียวUIStoryboardSegue *เป็นการกระทำและแสดงรายการให้คุณเลือก

หวังว่านี่จะตรงไปตรงมาและเป็นประโยชน์มากกว่าคำตอบที่มีอยู่ ฉันพบว่าลิงก์นี้มีประโยชน์อย่างยิ่งดังนั้นหากมีรายละเอียดที่คุณยังไม่ชัดเจนหลังจากอ่านคำตอบของฉันสิ่งนี้อาจช่วยคุณได้ (ฉันพยายามย่อข้อมูลที่เป็นประโยชน์ทั้งหมดจากบทความยาวนี้ให้เป็นคำตอบสั้น ๆ ): http://www.freelancemadscience.com/fmslabs_blog/2012/9/24/advanced-storyboard-techniques.html


4

โปรดดูที่ไม่สามารถเชื่อมต่อ Storyboard Unwind Segueซึ่งชี้แจงข้อกำหนดในการทำให้ไอคอนออกมีชีวิต คุณต้องมีลำดับชั้นของตัวควบคุมมุมมองสูงขึ้นซึ่งเป็นวิธีการที่:

  1. ทำเครื่องหมายเป็น IBAction

  2. ใช้พารามิเตอร์หนึ่งตัวที่เป็น UIStoryboardSegue *

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

ตอนนี้ฉันได้โพสต์ตัวอย่างที่ง่ายที่สุดในโลกแล้วที่นี่:

https://github.com/mattneub/Programming-iOS-Book-Examples/tree/master/ch19p638presentedViewControllerStoryboard (แก้ไข 12 กรกฎาคม 2556)

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


3

เพียงแค่เพิ่มความละเอียดอ่อนเล็กน้อยให้กับข้อกำหนดข้อกำหนดที่อาจช่วยได้ สิ่งนี้อ้างอิงจากการทดลองใน Xcode 4.6 ฉันพบว่าเป็นเพียงการประกาศ (!) ของวิธีการที่เปิดใช้งานการตอบสนองการลากควบคุมที่ต้องการจาก Xcode นี่คือสิ่งที่ฉันพบว่าเป็นข้อกำหนดทั้งหมด:

  • ทำเครื่องหมายเป็น IBAction
  • ใช้พารามิเตอร์หนึ่งตัวที่เป็นUIStoryboardSegue*
  • คุณต้องมีการประกาศการดำเนินการ (แต่ไม่จำเป็นต้องนำไปใช้ [หมายถึงวิธีการใน.Mส่วนการนำไปใช้งาน])
  • สามารถอยู่ในการประกาศอินเทอร์เฟซของคลาสใดก็ได้แม้แต่ส่วนอินเตอร์เฟสของ a .Mยกเว้นคลาส appdelegate (ฉันไม่เห็นการอ้างอิงใด ๆ กับตำแหน่งของมันในลำดับชั้นของคอนโทรลเลอร์คุณสามารถเพิ่มไฟล์เก่า ๆ และดูเหมือนว่าระบบจะรวมเมธอดทั้งหมดที่มีUIStoryboardSegueพารามิเตอร์และแสดงบนเมนูไอคอนออก) โปรดทราบว่า control-drag เมนูจะแสดงวิธีของคุณด้วยซ้ำหากเมธอดนั้นอยู่ในคลาสของฉากที่คุณกำลังจัดการในตัวแก้ไขสตอรีบอร์ด แต่จะปรากฏขึ้นโดยไม่มีเครื่องหมายจุดคู่และดูเหมือนจะไม่ทริกเกอร์การกระทำใด ๆ ในรันไทม์

ตัวอย่าง: -(IBAction)anymethodname:(UIStoryboardSegue *)myvariable;

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