StoryBoard ID คืออะไรและฉันจะใช้สิ่งนี้ได้อย่างไร?


110

ฉันยังใหม่กับการพัฒนา IOS และเพิ่งเริ่มต้นใน Xcode 4.5 ฉันเห็นทุก viewController ว่าฉันสามารถตั้งค่าตัวแปรเอกลักษณ์บางอย่างรวมถึงรหัสสตอรี่บอร์ด นี่คืออะไรและฉันจะใช้มันได้อย่างไร?

ใส่คำอธิบายภาพที่นี่

ฉันเริ่มค้นหาใน stackoverflow และไม่พบคำอธิบายใด ๆ ฉันคิดว่ามันไม่ใช่แค่ป้ายโง่ ๆ ที่ฉันสามารถตั้งค่าให้จำคอนโทรลเลอร์ได้ใช่ไหม มันทำอะไร?

คำตอบ:


132

Storyboard ID คือฟิลด์ String ที่คุณสามารถใช้เพื่อสร้าง ViewController ใหม่โดยใช้ Storyboard ViewController นั้น ตัวอย่างการใช้งานจะมาจาก ViewController:

//Maybe make a button that when clicked calls this method

- (IBAction)buttonPressed:(id)sender
{
    MyCustomViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"MyViewController"];

   [self presentViewController:vc animated:YES completion:nil];
}

สิ่งนี้จะสร้าง MyCustomViewController ขึ้นอยู่กับ Storyboard ViewController ที่คุณตั้งชื่อว่า "MyViewController" และนำเสนอไว้เหนือ View Controller ปัจจุบันของคุณ

และหากคุณอยู่ในแอปมอบหมายคุณสามารถใช้

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard"
                                                         bundle: nil];

แก้ไข: Swift

@IBAction func buttonPressed(sender: AnyObject) {
    let vc = storyboard?.instantiateViewControllerWithIdentifier("MyViewController") as MyCustomViewController
    presentViewController(vc, animated: true, completion: nil)
}

แก้ไขสำหรับ Swift> = 3:

@IBAction func buttonPressed(sender: Any) {
    let vc = storyboard?.instantiateViewController(withIdentifier: "MyViewController") as! ViewController
    present(vc, animated: true, completion: nil)
}

และ

let storyboard = UIStoryboard(name: "MainStoryboard", bundle: nil)

ลองดูสิแล้วคุณจะได้รับอย่างไรself.storyboard
RTB

self.storyboard สามารถเข้าถึงได้จากวิวคอนโทรลเลอร์ ฉันจะแก้ไขคำตอบของฉันตอนนี้เพื่อให้คุณเห็น
Eric

และถ้าจำเป็นต้องเข้าถึงจาก AppDelegate ของฉันหรือคลาสอื่น ๆ ล่ะ?
RTB

เพิ่มการแก้ไขอื่นที่แสดงวิธีการเข้าถึงกระดานเรื่องราวจากไฟล์ใด ๆ
Eric

1
self.storyboardสามารถเข้าถึงได้จากตัวควบคุมมุมมองใด ๆ ที่โหลดจากสตอรี่บอร์ด หากตัวควบคุมมุมมองไม่ได้โหลดจากสตอรีบอร์ดคุณสมบัตินั้นจะเป็นศูนย์
rob mayoff

13

ในการเพิ่มคำตอบของ Eric และอัปเดตสำหรับ Xcode 8 และ Swift 3:

รหัสสตอรีบอร์ดทำสิ่งที่ชื่อมีความหมาย: ระบุ เพียงแค่ว่ามันระบุควบคุมดูในแฟ้มสตอรี่บอร์ด เป็นวิธีที่สตอรีบอร์ดรู้ว่าตัวควบคุมมุมมองใดเป็นอย่างไร

ตอนนี้อย่าสับสนกับชื่อ รหัสสตอรีบอร์ดไม่ได้ระบุ 'สตอรีบอร์ด' สตอรีบอร์ดตามเอกสารของ Apple 'หมายถึงตัวควบคุมมุมมองสำหรับอินเทอร์เฟซผู้ใช้ทั้งหมดหรือบางส่วนของแอปของคุณ' ดังนั้นเมื่อคุณมีบางอย่างเช่นภาพด้านล่างคุณจะมีสตอรีบอร์ดชื่อ Main.storyboard ซึ่งมีตัวควบคุมมุมมองสองตัวซึ่งแต่ละตัวอาจได้รับรหัสสตอรี่บอร์ด (ID ในสตอรีบอร์ด)

ใส่คำอธิบายภาพที่นี่

คุณสามารถใช้รหัสสตอรี่บอร์ดของตัวควบคุมมุมมองเพื่อสร้างอินสแตนซ์และส่งคืนตัวควบคุมมุมมองนั้น จากนั้นคุณสามารถปรับแต่งและนำเสนอได้ตามที่คุณต้องการ ในการใช้ตัวอย่างของ Eric สมมติว่าคุณต้องการนำเสนอตัวควบคุมมุมมองที่มีตัวระบุ 'MyViewController' เมื่อกดปุ่มคุณจะต้องทำดังนี้:

@IBAction func buttonPressed(sender: Any) {
    // Here is where we create an instance of our view controller. instantiateViewController(withIdentifier:) will create an instance of the view controller every time it is called. That means you could create another instance when another button is pressed, for example.
    let vc = storyboard?.instantiateViewController(withIdentifier: "MyViewController") as! ViewController
    present(vc, animated: true, completion: nil)
}

โปรดสังเกตการเปลี่ยนแปลงในไวยากรณ์


ไอคอนคำเตือนสีเหลืองแสดงว่าเกิดจากการที่ตัวควบคุมมุมมองที่สองไม่มีจุดเข้าและ / หรือ ID สิ่งนี้สามารถแก้ไขได้โดยให้รหัสสตอรีบอร์ดหรือเชื่อมต่อกับคอนโทรลเลอร์มุมมองอื่นในสตอรีบอร์ด ด้วยวิธีนี้สตอรีบอร์ดจะรู้วิธีเข้าถึงและระบุตัวตน
Taiwosam

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