Как я могу программно представить контроллер представления по модулю?
Редактирование: при решении этой проблемы я обнаружил, что начать с вашего 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: )
Ответы
Ответ 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)