Представить раскадровку ViewController от другого ViewController - PullRequest
17 голосов
/ 19 января 2012

У меня есть несколько UIViewControllers в раскадровке моего приложения для iOS. Я хочу открыть один из контроллеров UIViewController (в раскадровке) из другого контроллера UIViewController.

Я попробовал приведенный ниже код, но он не работает, хотя я использовал его до iOS 5, и он работал нормально.

- (IBAction)addNotes:(id)sender {
    NotesViewController *notesView = [[NotesViewController alloc] initWithNibName:@"NotesViewController" bundle:nil];
    [self presentModalViewController:notesView animated:YES];
}

Как я могу выполнить это действие с раскадровками iOS 5?

Ответы [ 5 ]

52 голосов
/ 19 января 2012

Если у вас есть раскадровка, перейдите на раскадровку и дайте вашему 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];
6 голосов
/ 03 ноября 2015

Следующее будет работать на 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)
1 голос
/ 12 июня 2017

Обновление с версией 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)
1 голос
/ 01 июня 2015
UIViewController *initialHelpView = [[UIStoryboard storyboardWithName:@"StoryBoard_IDentifier" bundle:nil] instantiateViewControllerWithIdentifier:@"ViewController_Identifier"];
[self presentViewController:initialHelpView animated:YES completion:nil];
0 голосов
/ 05 декабря 2018

В Swift 4.2 ответ для тех, кто хочет этот ответ без навигации в модально и в быстрых обновленных версиях.

let storyboard = UIStoryboard(name: "YourStoryboardName", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "mainViewController")
self.present(controller, animated: true, completion: nil)
...