어디서든 (앱 대리인을 포함하여)보기 컨트롤러를 표시하기 위해 iOS 8 이상에서이 코드를 사용했습니다. 이전 호환성에 대해서는 잘 모르겠습니다. 모달보기에서 표시됩니다.
YOURAppDelegate *appDelegate = (YOURAppDelegate *)[[UIApplication sharedApplication] delegate];
UINavigationController *rootNavC = (UINavigationController *)appDelegate.window.rootViewController;
UIViewController *topVC = rootNavC.topViewController;
UIViewController *myNewVC = [rootNavC.storyboard instantiateViewControllerWithIdentifier:<YOUR STORYBOARD ID>];
if (topVC.presentedViewController)
{
if ([topVC.presentedViewController class] == [UINavigationController class])
{
dispatch_async(dispatch_get_main_queue(), ^{
[((UINavigationController*)topVC.presentedViewController) pushViewController:myNewVC
animated:YES];
});
}
else
{
dispatch_async(dispatch_get_main_queue(), ^{
[topVC.presentedViewController.navigationController pushViewController:myNewVC
animated:animated];
});
}
}
else
{
dispatch_async(dispatch_get_main_queue(), ^{
[rootNavC pushViewController:myNewVC
animated:animated];
});
}
일반적으로 이것을 편리한 방법으로 포장하고 인스턴스화 된보기 컨트롤러를 전달합니다. OP로 - 스토리 보드에 SignInViewController를 만들고, 고유 한 스토리 보드 ID를 할당 한 다음 위 코드에서 해당 ID로 대체하십시오.
'currentVC'란 무엇입니까? – Andreas
"currentVC"대신 "self"키워드를 사용하여 현재 수행중인 뷰 컨트롤러를 참조하십시오. –
하지만 그는 appconteate에서 "이전에"어떤 viewcontroller에 있을지에 대해 물었다. – Zerho