不希望 SplitView Controller 作为 rootViewController
Don't want SplitView Controller as rootViewController
Apple 文档说任何使用拆分视图控制器的应用程序都应该将其作为根视图控制器。但令我震惊的是,我的登录屏幕应该将我重定向到拆分视图控制器。有没有办法做到这一点?
我正在使用故事板并且是编程新手。请帮忙。
解决此问题的一种常见方法是更改应用程序主 UIWindow
的 rootViewController
(这又是 属性成功登录后 AppDelegate
)。
因此,您应用的 初始视图控制器 需要是处理登录的 LoginViewController
。登录成功后,你可以这样做:
- (void)switchToMainInterface
{
// Change the root view controller of the application window to the main storyboard
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];
UISplitViewController *mainSplitViewController = [mainStoryboard instantiateViewControllerWithIdentifier:@"MainSplitViewController"];
UIWindow *mainApplicationWindow = [[[UIApplication sharedApplication] delegate] window];
mainApplicationWindow.rootViewController = mainSplitViewController;
}
请注意,此代码只是使我的建议更具体的虚拟代码,它做出以下假设:
- 您的应用程序包中有一个名为
Main
的 故事板
- 在此
Main
故事板 中,您有一个 UISplitViewController
具有 故事板 ID MainSplitViewController
这样您就可以以编程方式实例化它
- 您需要
import AppDelegate.h
才能访问根目录 UIWindow
Link 你的 LoginViewController
变成了 UIViewcontroller
。在此控制器中拖动一个 UIContainerView
,并将您的 UISplitViewController
嵌入其中。
我创建了一个自定义 segue class 并实现了以下代码。我不确定它对我的应用程序有何影响。这对我来说似乎有点高级代码,因为我是一个成熟的人,但它工作正常。希望你觉得它有用。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//Override point for customization after application launch.
// UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController;
// UINavigationController *navigationController = [splitViewController.viewControllers lastObject];
// splitViewController.delegate = (id)navigationController.topViewController;
return YES;
}
评论了上面的代码,我认为这是为了暂停 UISplitViewController 加载到 UIWindow。
我的自定义 segue --> segue.m 如下..
#import "Seague.h"
@implementation Seague
-(void)perform
{
UIViewController *sourceViewController = (UIViewController *)self.sourceViewController;
UIViewController *destinationViewController = (UIViewController *)self.destinationViewController;
UISplitViewController *splitViewController = (UISplitViewController *)destinationViewController;
UINavigationController *navigationController = [splitViewController.viewControllers lastObject];
splitViewController.delegate = (id)navigationController.topViewController;
UIWindow *window = [UIApplication sharedApplication].keyWindow;
window.rootViewController = destinationViewController;
window.rootViewController = sourceViewController;
[UIView transitionWithView:sourceViewController.view.window duration:0.5 options:UIViewAnimationOptionTransitionNone animations:^{
window.rootViewController = destinationViewController;
} completion:^(BOOL finished){}];
}
@end
当按下我的登录按钮并且登录详细信息有效时,将触发此 segue。
我的 rootViewController 是 viewController,它有我的登录按钮,而不是 UISplitViewController。
参考:这不是我写的代码。搜索 2 天后在网上某处找到它。将很快更新来源link以供参考。
谢谢大家的回复:)
Apple 文档说任何使用拆分视图控制器的应用程序都应该将其作为根视图控制器。但令我震惊的是,我的登录屏幕应该将我重定向到拆分视图控制器。有没有办法做到这一点?
我正在使用故事板并且是编程新手。请帮忙。
解决此问题的一种常见方法是更改应用程序主 UIWindow
的 rootViewController
(这又是 属性成功登录后 AppDelegate
)。
因此,您应用的 初始视图控制器 需要是处理登录的 LoginViewController
。登录成功后,你可以这样做:
- (void)switchToMainInterface
{
// Change the root view controller of the application window to the main storyboard
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];
UISplitViewController *mainSplitViewController = [mainStoryboard instantiateViewControllerWithIdentifier:@"MainSplitViewController"];
UIWindow *mainApplicationWindow = [[[UIApplication sharedApplication] delegate] window];
mainApplicationWindow.rootViewController = mainSplitViewController;
}
请注意,此代码只是使我的建议更具体的虚拟代码,它做出以下假设:
- 您的应用程序包中有一个名为
Main
的 故事板 - 在此
Main
故事板 中,您有一个UISplitViewController
具有 故事板 IDMainSplitViewController
这样您就可以以编程方式实例化它 - 您需要
import AppDelegate.h
才能访问根目录UIWindow
Link 你的 LoginViewController
变成了 UIViewcontroller
。在此控制器中拖动一个 UIContainerView
,并将您的 UISplitViewController
嵌入其中。
我创建了一个自定义 segue class 并实现了以下代码。我不确定它对我的应用程序有何影响。这对我来说似乎有点高级代码,因为我是一个成熟的人,但它工作正常。希望你觉得它有用。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//Override point for customization after application launch.
// UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController;
// UINavigationController *navigationController = [splitViewController.viewControllers lastObject];
// splitViewController.delegate = (id)navigationController.topViewController;
return YES;
}
评论了上面的代码,我认为这是为了暂停 UISplitViewController 加载到 UIWindow。
我的自定义 segue --> segue.m 如下..
#import "Seague.h"
@implementation Seague
-(void)perform
{
UIViewController *sourceViewController = (UIViewController *)self.sourceViewController;
UIViewController *destinationViewController = (UIViewController *)self.destinationViewController;
UISplitViewController *splitViewController = (UISplitViewController *)destinationViewController;
UINavigationController *navigationController = [splitViewController.viewControllers lastObject];
splitViewController.delegate = (id)navigationController.topViewController;
UIWindow *window = [UIApplication sharedApplication].keyWindow;
window.rootViewController = destinationViewController;
window.rootViewController = sourceViewController;
[UIView transitionWithView:sourceViewController.view.window duration:0.5 options:UIViewAnimationOptionTransitionNone animations:^{
window.rootViewController = destinationViewController;
} completion:^(BOOL finished){}];
}
@end
当按下我的登录按钮并且登录详细信息有效时,将触发此 segue。 我的 rootViewController 是 viewController,它有我的登录按钮,而不是 UISplitViewController。
参考:这不是我写的代码。搜索 2 天后在网上某处找到它。将很快更新来源link以供参考。
谢谢大家的回复:)