我正在构建我的第一个iPad应用程序。我的一个要求是处理UISplitviewcontroller和UINavigationController。
我们建议的视图层次是
(LoginView) - > UINavigationView(LandingView + CollectionView) - > UISplitViewcontroller(DetailsView)。
我们的应用仅支持横向模式
我指的是这个 所以问题(以及GILT应用程序),作为newbi,我很难根据该描述完成它。
所以我的问题是
1)如果有人可以提供小代码片段或参考教程,我怎样才能实现相同的目标
2)根据Apples HIG,UISplitviewcontroller应该是rootviewcontroller,如果没有的话。 Apple会不会拒绝我的应用程序。(显然GILT小组已被批准)
3)我找到了 MGSplitViewController ,我可以使用那个不是root用户吗?
任何帮助,将不胜感激。作为newbi,我希望我的问题是真实的
如果你想使用现成的splitView它 必须 是根;这里的任何一个野蛮人都会打破苹果指导方针或表现出非常奇怪的行为。
该 MGSplitViewController 是完全自定义的SplitViewController实现。如果你需要那种东西它非常好,但有些功能是基于我们的应用程序将定位的事实。
或者你也可以做自己的。我不止一次这样做,比听起来容易。
(LoginView)
- > UINavigationView(LandingView + CollectionView) - > UISplitViewcontroller(
DetailsView控件)。
基于开箱即用的UISplitView,我建议:
Dave确实有一点,但我会从你从用户那里删除方向选择的角度来看待它;删除标准选择(如支持的方向),因为设计者假设某些配置更有效只会惹恼一些用户。
如果你想使用现成的splitView它 必须 是根;这里的任何一个野蛮人都会打破苹果指导方针或表现出非常奇怪的行为。
该 MGSplitViewController 是完全自定义的SplitViewController实现。如果你需要那种东西它非常好,但有些功能是基于我们的应用程序将定位的事实。
或者你也可以做自己的。我不止一次这样做,比听起来容易。
(LoginView)
- > UINavigationView(LandingView + CollectionView) - > UISplitViewcontroller(
DetailsView控件)。
基于开箱即用的UISplitView,我建议:
Dave确实有一点,但我会从你从用户那里删除方向选择的角度来看待它;删除标准选择(如支持的方向),因为设计者假设某些配置更有效只会惹恼一些用户。
我是通过制作一个方法来实现的 detailViewController
:
-(void)popHomeScreen:(BOOL)animated//OPENS THE HOMESCREEN IN A MODAL DISPLAY
{
firstRun=NO;
//myViewControllerForPopOver init here
myViewControllerForPopOver.modalPresentationStyle = UIModalPresentationFullScreen;
myViewControllerForPopOver.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;//simple anime
if (animated) [self presentModalViewController:myViewControllerForPopOver animated:YES];
else [self presentModalViewController:myViewControllerForPopOver animated:NO];
}
然后在中调用它 detailViewControllers
ViewDidAppear
方法:
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
if(firstRun)[self popHomeScreen:NO];
}
//YOU WILL ALSO NEED TO MAKE 'firstRun=YES' in viewDidLoad
//firstRun is a BOOL
至于根消失(留下一个大的黑色空间)..这是一个已知的错误。虽然我想了一会儿,这是因为在它自己绘制之前/之前订购了一个动画。
另外,我发现如果我在splitView上弹出一个全屏模态然后快速弹出另一个基于模式的模态(例如),之后全屏模式没有正确绘制。
SplitViews就像你的岳母,你真的不喜欢它们,当你不得不使用它们时,你必须小心翼翼地绕过地雷。
试试这个,它对我有用
1)在app delegate的didFinishLaunchingWithOptions中使您的登录视图成为根视图
self.window.rootViewController = self.loginViewController;
另外,像模板一样初始化拆分视图(但不添加到self.window)
MasterViewController *masterViewController = [[[MasterViewController alloc] initWithNibName:@"MasterViewController_iPad" bundle:nil] autorelease];
UINavigationController *masterNavigationController = [[[UINavigationController alloc] initWithRootViewController:masterViewController] autorelease];
DetailViewController *detailViewController = [[[DetailViewController alloc] initWithNibName:@"DetailViewController_iPad" bundle:nil] autorelease];
UINavigationController *detailNavigationController = [[[UINavigationController alloc] initWithRootViewController:detailViewController] autorelease];
self.splitViewController = [[[UISplitViewController alloc] init] autorelease];
self.splitViewController.delegate = detailViewController;
self.splitViewController.viewControllers = [NSArray arrayWithObjects:masterNavigationController ,detailNavigationController, nil];
2)在app的委托中添加交换视图控制器,将根视图交换为拆分viewcontroller。
-(void)swapToViewControllers:(RootViewControllerType)viewType
self.window.rootViewController = self.splitViewController;
3)在登录视图中调用swapToViewControllers。
修改了Ryan CY的故事板版本。
将此代码放入登录控制器。
1.将UISplitViewController的storyboard id设置为SplitViewController;
2.设置UISplitViewController委托并保存实例
UISplitViewController* splitController = [self.storyboard instantiateViewControllerWithIdentifier:@"SplitViewController"];
UINavigationController* navigationController = [splitController.viewControllers lastObject];
splitController.delegate = (id)navigationController.topViewController;