Представляем раскадровку ViewController из другого ViewController
У меня есть несколько UIViewControllers в моей раскадровке приложений для iOS. Я хочу открыть один из UIViewControllers (в раскадровке) из другого UIViewController.
Я пробовал код ниже, но он не работает, хотя я использовал его перед iOS 5, и он работал нормально.
- (IBAction)addNotes:(id)sender {
NotesViewController *notesView = [[NotesViewController alloc] initWithNibName:@"NotesViewController" bundle:nil];
[self presentModalViewController:notesView animated:YES];
}
Как я могу выполнить это действие с раскадрой iOS 5?
Ответы
Ответ 1
Предполагая, что у вас есть раскадровка, перейдите в раскадровку и дайте VC идентификатору (инспектору), а затем выполните:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"IDENTIFIER"];
[self.navigationController pushViewController:vc animated:YES];
Предполагая, что у вас есть xib файл, который вы хотите сделать:
UIViewController *vc = [[UIViewController alloc] initWithNibName:@"NIBNAME" bundle:nil];
[self.navigationController pushViewController:vc animated:YES];
Без xib файла:
UIViewController *vc = [[UIViewController alloc] init];
[self.navigationController pushViewController:vc animated:YES];
Ответ 2
Следующее будет работать с Swift 3.0 и выше.
StoryBoard
let storyBoard = UIStoryboard(name: "Main", bundle: nil)
let mainViewController = storyBoard.instantiateViewController(withIdentifier: "Identifier")
self.navigationController?.pushViewController(mainViewController, animated: true)
.xib
let viewController = UIViewController(nibName: "NibName", bundle: nil)
self.navigationController?.pushViewController(viewController, animated: true)
Без .xib
let viewController = UIViewController()
self.navigationController?.pushViewController(viewController, animated: true)
Ответ 3
UIViewController *initialHelpView = [[UIStoryboard storyboardWithName:@"StoryBoard_IDentifier" bundle:nil] instantiateViewControllerWithIdentifier:@"ViewController_Identifier"];
[self presentViewController:initialHelpView animated:YES completion:nil];
Ответ 4
Обновление с версией Swift 3.1
если не имеет встроенного контроллера навигации, тогда
let storyBoard:UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let viewController2 = storyBoard.instantiateViewController(withIdentifier: "ViewController2")
self.present(viewController2, animated: true, completion: nil)
и, если у вас был встроенный контроллер навигации, то
let storyBoard:UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let viewController2 = storyBoard.instantiateViewController(withIdentifier: "ViewController2")
self.navigationController?.pushViewController(viewController2, animated: true)
Ответ 5
В быстром ответе 4.2 для тех, кто хочет этот ответ без навигации в моде и в быстрых обновленных версиях.
let storyboard = UIStoryboard(name: "YourStoryboardName", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "mainViewController")
self.present(controller, animated: true, completion: nil)