Czy można przejść z jednej scenorysu do drugiej lub osadzić scenorys w kontrolerze widoku w innej planszy? I należy umieścić UITabBarController
w sposób UINavigationController
, i chciałbym je zachować ładny i rozdzielić.
Czy można przejść z jednej scenorysu do drugiej lub osadzić scenorys w kontrolerze widoku w innej planszy? I należy umieścić UITabBarController
w sposób UINavigationController
, i chciałbym je zachować ładny i rozdzielić.
Odpowiedzi:
Tak, ale musisz to zrobić programowo:
// 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];
Począwszy od Xcode 7, możesz to zrobić graficznie, używając odnośnika do scenorysu:
Dodaj odniesienie do scenorysu do swojej serii ujęć. Utwórz przejście między ViewController i Storyboard Reference (ctrl + drag)
Następnie wypełnij te pola.
Gdzie „Tutorial” to plik „Tutorial.storyboard”, a „MainTutorialController” to Twoje pole „Storyboard ID” w ViewControllerSettings
Tak naprawdę nie można tworzyć seguesów ręcznie, ponieważ UIStoryboardSegue jest klasą abstrakcyjną. Musisz go podklasować i zaimplementować perform
, aby mógł cokolwiek zrobić. Naprawdę mają być tworzone w scenorysach. Możesz jednak nacisnąć kontroler widoku ręcznie, co jest dobrym rozwiązaniem. Odpowiedź Lnafzigera dobrze to robi:
UIStoryboard *secondStoryBoard = [UIStoryboard storyboardWithName:@"secondStoryBoard" bundle:nil];
UIViewController *theTabBar = [secondStoryBoard instantiateViewControllerWithIdentifier:@"myTabBar"];
[self.navigationController pushViewController:theTabBar animated:YES];
Należy jednak zauważyć, że powiedziałeś, że chcesz, aby wszystko było ładne i oddzielne. Ideą storyboardów jest umożliwienie oddzielenia rzeczy podczas wykonywania wszystkich prac projektowych w jednym miejscu. Każdy kontroler widoku jest ładny i oddzielony w serii ujęć od innych. Chodzi o to, aby wszystko było w jednym miejscu. Po prostu ułóż to ładnie, aby było uporządkowane i będziesz gotowy. Nie powinieneś go rozdzielać, chyba że masz naprawdę dobry powód, aby to zrobić.
Nie należy umieszczać UITabBarControllers w UINavigationController. Pyta o błędy, takie jak niepoprawna autorotacja / wyładowanie widoku itp., Ponieważ Apple nie obsługuje tego rodzaju powstrzymywania:
Jednak przy łączeniu kontrolerów widoku ważna jest kolejność zawierania; obowiązują tylko niektóre ustalenia. Kolejność zawierania, od dziecka do rodzica, jest następująca:
- Kontrolery widoku zawartości i kontrolery widoku kontenera, które mają elastyczne granice (takie jak kontroler widoku strony)
- Kontroler widoku nawigacji
- Kontroler paska kart
- Kontroler widoku podzielonego
Oto szybka wersja:
let targetStoryboardName = "Main"
let targetStoryboard = UIStoryboard(name: targetStoryboardName, bundle: nil)
if let targetViewController = targetStoryboard.instantiateInitialViewController() {
self.navigationController?.pushViewController(targetViewController, animated: true)
}
czy próbowałeś następujących rzeczy:
2 / kliknij, aby wybrać kontroler widoku, który jest połączony z kontrolerem nawigacji iw górnym menu: edytor -> osadzenie w -> kontroler paska zakładek
Uwaga: nie testowałem tego, ponieważ używam odwrotnego działania: tworzenia aplikacji z zakładkami i umieszczania kontrolera nawigacji w środku).