Подтвердить что ты не робот

Текущий контроллер просмотра в раскадровке с навигационным контроллером - 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];

Как вы можете сделать это быстро?

4b9b3361

Ответ 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)

Спасибо!!!