Apple文檔說任何使用分割視圖控制器的應用程序都應該將其作爲根視圖控制器。但是我感到很震驚,我的登錄界面應該將我重定向到一個分割視圖控制器。有沒有辦法做到這一點?不希望SplitView控制器作爲rootViewController
我使用故事板和新的編程。請幫助。
Apple文檔說任何使用分割視圖控制器的應用程序都應該將其作爲根視圖控制器。但是我感到很震驚,我的登錄界面應該將我重定向到一個分割視圖控制器。有沒有辦法做到這一點?不希望SplitView控制器作爲rootViewController
我使用故事板和新的編程。請幫助。
一種很常見的方式來解決這個問題,改變你的應用程序主要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
This Works awesome !!謝謝:) @nburk – prasaadem
鏈接你的LoginViewController
到UIViewcontroller
訪問。在此控制器中拖動一個UIContainerView
,並在其中嵌入您的UISplitViewController
。
我創建了一個自定義的segue類並實現了下面的代碼。我不確定它對我的應用程序有什麼影響。這對我來說似乎有點高級代碼,因爲我是一個小孩,但它工作正常。希望你覺得它有用。
- (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.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
這賽格瑞被觸發,當我登錄按鈕按下並且登錄信息有效。 我的rootViewController是有我的登錄按鈕,而不是UISplitViewController的viewController。
參考:這不是我寫的代碼。搜索2天后在網上找到它。將盡快更新來源鏈接以供參考。
三江源所有您的答覆:)
你有沒有考慮過拆分視圖模態呈現登錄屏幕? – Wain
這是一個很常見的問題。更改應用程序的主UIWindow的'rootViewController'就可以做到這一點。 – nburk
@prasaadem你對我的建議有什麼看法? – nburk