Текущий контроллер просмотра в раскадровке с навигационным контроллером - Swift
В настоящее время я показываю viewController в своем новом раскадровке ниже:
var storyboard : UIStoryboard = UIStoryboard(name: AccountStoryboard, bundle: nil)
var vc : WelcomeViewController = storyboard.instantiateViewControllerWithIdentifier("WelcomeID") as WelcomeViewController
vc.teststring = "hello"
self.presentViewController(vc, animated: true, completion: nil)
Однако это представляет собой viewcontroller без встроенного контроллера навигации.
Я попробовал изменить "WelcomeID" на контроллер навигации в раскадровке - однако этого не произошло.
Я получил эту работу в Objective -C, однако не знаю, как преобразовать в быстрый:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"SetupStoryboard" bundle:nil];
UINavigationController *navigationController1 = [storyboard instantiateInitialViewController];
navigationController1.modalPresentationStyle = UIModalPresentationFormSheet;
navigationController1.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
WelcomeViewController *vc = (WelcomeViewController *)navigationController1.viewControllers[0];
vc.teststring = @"Hello";
[self presentViewController:navigationController1 animated:YES completion:nil];
Как вы можете сделать это быстро?
Ответы
Ответ 1
Ты определенно на правильном пути. К сожалению, когда вы ссылаетесь на контроллер представления по его идентификатору раскадровки, он будет игнорировать тот факт, что он встроен во что угодно. То же самое касается segues, когда вы переходите к чему-то встроенному, контроллер представления назначения будет контроллером внедрения, а не контроллером, которого вы обычно интересуете. Во всяком случае, вы должны решить проблему аналогичным образом Objective-C, так что это просто упражнение в портировании синтаксиса.
Изменить: определение имени раскадровки со строкой сейчас
let storyboard : UIStoryboard = UIStoryboard(name: "AccountStoryboard", bundle: nil)
let vc : WelcomeViewController = storyboard.instantiateViewControllerWithIdentifier("WelcomeID") as WelcomeViewController
vc.teststring = "hello"
let navigationController = UINavigationController(rootViewController: vc)
self.presentViewController(navigationController, animated: true, completion: nil)
ИЛИ вы можете дать вашему контроллеру представления вложения идентификатор и вместо этого создать экземпляр.
Ответ 2
let secondViewController = self.storyboard?.instantiateViewControllerWithIdentifier("WelcomeID") as SecondViewController
self.navigationController?.pushViewController(secondViewController, animated: true)
Имя класса: SecondCiewController
![Identifier Name]()
Ответ 3
Ответ, данный @Chris, хорош в старой версии быстрой версии.
Обновить Swift 3 и Swift 4
let storyboard : UIStoryboard = UIStoryboard(name: "AccountStoryboard", bundle: nil)
let vc : WelcomeViewController = storyboard.instantiateViewController(withIdentifier: "WelcomeID") as! WelcomeViewController
vc.teststring = "hello"
let navigationController = UINavigationController(rootViewController: vc)
self.present(navigationController, animated: true, completion: nil)
Спасибо!!!