Как я могу программно представить контроллер представления по модулю?

Редактирование: при решении этой проблемы я обнаружил, что начать с вашего UITabBarController намного проще, а затем выполнить проверку входа через метод AppDelegate.m didFinishLaunchingWithOptions:.

Вопрос: Этот код находится в application didFinishLaunchingWithOptions: метод в моем AppDelegate.m

if([result isEqualToString: @"log"])
{
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    UIViewController *ivc = [storyboard instantiateViewControllerWithIdentifier:@"TabBarControl"];
    [(UINavigationController*)self.window.rootViewController pushViewController:ivc animated:NO];
    NSLog(@"It hitting log");
}

Он просто берет HTTP-запрос для пользователя, входящего в систему, и переносит его в мой TabBarController. Проблема заключается в том, что он использует перенос, а не модальный переход для отображения страницы. Поскольку метод currentModalViewController устарел или удален в iOS7, как я могу программно форматировать модальную презентацию?

EDIT: vFFbTDW.png)

Ответ 1

Старый presentViewController:animated: был устаревшим, нам нужно использовать presentViewController:animated:completion вместо этого. Теперь вам просто нужно добавить параметр completion в метод - это должно работать:

if([result isEqualToString: @"log"])
{
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    UIViewController *ivc = [storyboard instantiateViewControllerWithIdentifier:@"TabBarControl"];
    [(UINavigationController*)self.window.rootViewController presentViewController:ivc animated:NO completion:nil];
    NSLog(@"It hitting log");
}

Документы - хорошее место для запуска - документы для UIViewController presentViewController:animated рассказывают вам, что вам нужно знать:

presentModalViewController: анимированные:

Представляет модальный вид, управляемый данным контроллером представления пользователю. (Устаревший в iOS 6.0. Используйте presentViewController:animated:completion: вместо этого.)

- (void)presentModalViewController:(UIViewController *)modalViewController animated:(BOOL)animated

Ответ 2

стриж

Поскольку принятый ответ находится в Objective-C, именно так вы и поступите в Swift. В отличие от принятого ответа, этот ответ не относится к навигационному контроллеру.

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let secondViewController = storyboard.instantiateViewController(withIdentifier: "secondViewController") as! SecondViewController
self.present(secondViewController, animated: true, completion: nil)

При необходимости измените имя раскадровки, контроллер просмотра и идентификатор.

Смотрите также, как программно отключить контроллер представления.

Ответ 3

В быстром 4.2 вы можете сделать это так. Для тех, кто хочет получить этот ответ в быстрой обновленной версии.

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

Ответ 4

В Swift 3/4

     let storyB = UIStoryboard(name: "Main", bundle: nil) 
     let secondViewController = storyB.instantiateViewController(withIdentifier: "SecondViewControllerID") as! SecondViewController
     self.present(secondViewController, animated: true, completion: nil)

Ответ 5

 let storyB = UIStoryboard(name: "Main", bundle: nil) 
 let secondViewController = 
 storyB.instantiateViewController(withIdentifier: 
 "SecondViewControllerID") as! SecondViewController
 self.present(secondViewController, animated: true, completion: nil)

В secondViewController используйте этот код для возврата.

 self.dismiss(animated: true, completion: nil)