เป็นไปได้ไหมที่จะทำต่อจากสตอรีบอร์ดหนึ่งไปยังอีกบอร์ดหนึ่งหรือฝังสตอรีบอร์ดในตัวควบคุมมุมมองในสตอรีบอร์ดอื่น ฉันต้องการวางUITabBarController
ใน a UINavigationController
และฉันต้องการให้มันดีและแยกจากกัน
เป็นไปได้ไหมที่จะทำต่อจากสตอรีบอร์ดหนึ่งไปยังอีกบอร์ดหนึ่งหรือฝังสตอรีบอร์ดในตัวควบคุมมุมมองในสตอรีบอร์ดอื่น ฉันต้องการวางUITabBarController
ใน a UINavigationController
และฉันต้องการให้มันดีและแยกจากกัน
คำตอบ:
ใช่ แต่คุณต้องทำแบบเป็นโปรแกรม:
// Get the storyboard named secondStoryBoard from the main bundle:
UIStoryboard *secondStoryBoard = [UIStoryboard storyboardWithName:@"secondStoryBoard" bundle:nil];
// Load the initial view controller from the storyboard.
// Set this by selecting 'Is Initial View Controller' on the appropriate view controller in the storyboard.
UIViewController *theInitialViewController = [secondStoryBoard instantiateInitialViewController];
//
// **OR**
//
// Load the view controller with the identifier string myTabBar
// Change UIViewController to the appropriate class
UIViewController *theTabBar = (UIViewController *)[secondStoryBoard instantiateViewControllerWithIdentifier:@"myTabBar"];
// Then push the new view controller in the usual way:
[self.navigationController pushViewController:theTabBar animated:YES];
ตั้งแต่ Xcode 7 เป็นต้นไปคุณสามารถทำกราฟิกได้โดยใช้ Storyboard Reference:
เพิ่มการอ้างอิง Storyboard ในสตอรีบอร์ดของคุณ สร้างการต่อระหว่าง ViewController และ Storyboard Reference (ctrl + drag)
จากนั้นกรอกข้อมูลในช่องนี้
โดยที่ "Tutorial" คือไฟล์ "Tutorial.storyboard" และ "MainTutorialController" คือช่อง "Storyboard ID" ของคุณใน ViewControllerSettings
คุณไม่สามารถทำ segues ด้วยตนเองได้เนื่องจาก UIStoryboardSegue เป็นคลาสนามธรรม คุณต้องซับคลาสและนำไปใช้perform
เพื่อให้ทำอะไรก็ได้ พวกเขาถูกสร้างขึ้นในสตอรีบอร์ดจริงๆ คุณสามารถดันตัวควบคุมมุมมองด้วยตนเองได้ซึ่งเป็นทางออกที่ดี คำตอบของ lnafziger ทำได้ดี:
UIStoryboard *secondStoryBoard = [UIStoryboard storyboardWithName:@"secondStoryBoard" bundle:nil];
UIViewController *theTabBar = [secondStoryBoard instantiateViewControllerWithIdentifier:@"myTabBar"];
[self.navigationController pushViewController:theTabBar animated:YES];
สิ่งหนึ่งที่ควรทราบก็คือคุณเคยบอกว่าคุณต้องการรักษาสิ่งต่างๆให้ดีและแยกจากกัน แนวคิดของสตอรีบอร์ดคือให้คุณแยกสิ่งต่างๆออกจากกันในขณะที่ทำงานออกแบบทั้งหมดในที่เดียว ตัวควบคุมมุมมองแต่ละตัวนั้นดีและแยกออกจากกระดานเรื่องราวภายในกระดานเรื่องราวอื่น ๆ แนวคิดทั้งหมดคือเก็บไว้ในที่เดียว เพียงแค่จัดวางอย่างสวยงามเพื่อให้เป็นระเบียบและคุณก็พร้อมที่จะไป คุณไม่ควรแยกมันออกไปเว้นแต่คุณจะมีเหตุผลที่ดีจริงๆที่จะทำเช่นนั้น
คุณไม่ควรวาง UITabBarControllers ใน UINavigationController กำลังขอจุดบกพร่องเช่นการหมุนอัตโนมัติ / ดูการยกเลิกการโหลดที่ไม่ถูกต้องเป็นต้นเนื่องจาก Apple ไม่รองรับการกักกันประเภทนี้:
อย่างไรก็ตามเมื่อรวมตัวควบคุมมุมมองลำดับของการกักกันมีความสำคัญ การเตรียมการบางอย่างเท่านั้นที่ถูกต้อง ลำดับการกักกันจากเด็กไปยังผู้ปกครองมีดังนี้:
- ตัวควบคุมมุมมองเนื้อหาและตัวควบคุมมุมมองคอนเทนเนอร์ที่มีขอบเขตที่ยืดหยุ่น (เช่นตัวควบคุมมุมมองหน้า)
- ตัวควบคุมมุมมองการนำทาง
- ตัวควบคุมแถบแท็บ
- ตัวควบคุมมุมมองแยก
นี่คือเวอร์ชันที่รวดเร็ว:
let targetStoryboardName = "Main"
let targetStoryboard = UIStoryboard(name: targetStoryboardName, bundle: nil)
if let targetViewController = targetStoryboard.instantiateInitialViewController() {
self.navigationController?.pushViewController(targetViewController, animated: true)
}
คุณลองทำสิ่งต่อไปนี้หรือไม่:
2 / คลิกเพื่อเลือกตัวควบคุมมุมมองของคุณซึ่งเชื่อมโยงกับตัวควบคุมการนำทางของคุณและในเมนูด้านบน: ตัวแก้ไข -> ฝังใน -> ตัวควบคุมแถบแท็บ
หมายเหตุ: ฉันไม่ได้ทดสอบเพราะฉันใช้สิ่งที่ตรงกันข้าม: สร้างแอพแถบแบบแท็บและวางตัวควบคุมการนำทางไว้ข้างใน)