한 스토리 보드에서 다른 스토리 보드로 연결하거나 스토리 보드를 다른 스토리 보드의 뷰 컨트롤러에 포함시킬 수 있습니까? 나는 배치해야 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를 사용하여 그래픽으로 수행 할 수 있습니다.
스토리 보드에 스토리 보드 참조를 추가하십시오. ViewController와 Storyboard Reference 사이에 segue 생성 (ctrl + 드래그)
그런 다음이 필드를 채우십시오.
여기서 "Tutorial"은 "Tutorial.storyboard"파일이고 "MainTutorialController"는 ViewControllerSettings의 "Storyboard ID"필드입니다.
UIStoryboardSegue는 추상 클래스이므로 실제로 수동으로 segue를 수행 할 수 없습니다. 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)
}