it-swarm.com.ru

Контроллер представления в раскадровке с контроллером навигации - 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, однако не знаю, как преобразовать в Swift:

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];

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

37
Ryan

Вы определенно на правильном пути. К сожалению, когда вы ссылаетесь на контроллер представления по его идентификатору раскадровки, он игнорирует тот факт, что он встроен во что-либо. То же самое относится и к 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)

ИЛИ вы можете дать своему встраиваемому контроллеру представления идентификатор и создать его вместо него.

88
Chris Wagner
 let secondViewController = self.storyboard?.instantiateViewControllerWithIdentifier("WelcomeID") as SecondViewController

        self.navigationController?.pushViewController(secondViewController, animated: true)

Имя класса: SecondCiewController

Identifier Name

16
abdul sathar

Ответ, данный @Chris, хорошо работает в более старой версии Swift.

Обновление 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)

Спасибо!!!

9
Harjot Singh
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "SalesVC") as! SalesVC

navigationController?.pushViewController(vc, animated: true)
0
Aditya A.Rajan