我通常创建没有IB东西的项目。我做的第一件事是剥离所有对xibs,outlet更新plist等的引用。没问题,效果很好(在我的世界里)!
现在,我刚刚安装了3.2并试图开发我的第一个iPad应用程序。按照与以前相同的步骤,我创建了一个基于UISplitView的应用程序项目,并剥离了所有IB的东西。此外,我按照Apple的参考文档中的部分:Creating a Split View Controller Programmatically,但是,从未显示主视图,只有详细视图(无论方向是什么)。我真的试着仔细看看,但我无法理解我错过了什么。
是否有一个UISplitViewController的工作示例,没有笔尖浮动在某处?我用谷歌搜索但找不到任何东西。或者你知道我可能错过了什么吗?
答案 0 :(得分:58)
在你的委托标题中声明你的splitviewcontroller,在你的didfinishlaunching中使用这样的东西
确保将UISplitViewControllerDelegate添加到detailedViewController头文件中,并且您还拥有委托方法。记得导入相关的头文件
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
splitViewController = [[UISplitViewController alloc] init];
rootViewController *root = [[rootViewController alloc] init];
detailedViewController *detail = [[detailedViewController alloc] init];
UINavigationController *rootNav = [[UINavigationController alloc] initWithRootViewController:root];
UINavigationController *detailNav = [[UINavigationController alloc] initWithRootViewController:detail];
splitViewController.viewControllers = [NSArray arrayWithObjects:rootNav, detailNav, nil];
splitViewController.delegate = detail;
[window addSubview:splitViewController.view];
编辑 - 根据斯科特的优秀建议,不要添加到windows子视图,而是
[self.window setRootViewController:(UIViewController*)splitViewController]; // that's the ticket
[window makeKeyAndVisible];
return YES;
}
//detailedView delegate methods
- (void)splitViewController:(UISplitViewController*)svc
willHideViewController:(UIViewController *)aViewController
withBarButtonItem:(UIBarButtonItem*)barButtonItem
forPopoverController:(UIPopoverController*)pc
{
[barButtonItem setTitle:@"your title"];
self.navigationItem.leftBarButtonItem = barButtonItem;
}
- (void)splitViewController:(UISplitViewController*)svc
willShowViewController:(UIViewController *)aViewController
invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem
{
self.navigationItem.leftBarButtonItem = nil;
}
我也更喜欢IB的代码; - )
答案 1 :(得分:23)
过时的线程,但是当上述技术无法生成对设备方向更改事件做出正确响应的UISplitViewController时,我认为我会节省阅读时间+悲伤。你需要:
而不是将UISplitViewController的视图添加到主窗口,
[window addSubview:splitViewController.view]; // don't do this
而是将主窗口的根控制器设置为UISplitViewController:
[self.window setRootViewController:(UIViewController*)splitViewController]; // that's the ticket
将splitviewcontroller的视图添加为主窗口的子视图(几乎没有)允许它与兄弟视图共存,但它不能与UISplitViewController的预期用例一起使用。 UISplitViewController是一个高地视图; 只能有一个。
答案 2 :(得分:4)
我刚遇到同样的问题。 确保您的子视图splitview的viewController可以自动旋转到界面方向。
您可以像这样更改childViewController中的功能:
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES;
}
然后将显示主视图。
答案 3 :(得分:0)
Swift 5.0 版本(主视图控制器和详细视图控制器都嵌入在导航控制器中)
let splitViewController = UISplitViewController()
splitViewController.delegate = self
let masterVC = MasterViewController()
let detailVC = DetailViewController()
let masterNavController = UINavigationController(rootViewController: masterVC)
let detailNavController = UINavigationController(rootViewController: detailVC)
splitViewController.viewControllers = [masterNavController,detailNavController]
您可以将此代码放入AppDelegate的didFinishLaunchingWithOptions
函数中。只需记住将splitViewController
设置为rootViewController
self.window!.rootViewController = splitViewController