我正在尝试做一些类似(但不完全像)在iPad上找到的电子邮件应用程序。
具体地说,我想创建一个基于选项卡的应用程序,但是每个选项卡都会向用户呈现一个不同的 UISplitView。
每个UISplitView都包含一个主视图和一个详细视图(显然)。
在每个UISplitView中,我希望主控器是一个多级导航控制器,在这个控制器中,新的UIViewControllers被推入(或弹出)堆栈。UISplitView中的这种导航类型是应用程序类似于原生电子邮件应用程序的地方。
据我所知,唯一一个描述“accepted控制器内部的拆分视图控制器”的地方是:UISplitViewController in a TabBar ( UITabBarController )?和我尝试遵循公认的答案。
被接受的解决方案似乎对我有效(即,我得到了一个标签栏控制器,它允许我在不同的UISplitViews之间切换)。
问题是,我不知道如何使UISplitView的左侧成为多级导航控制器。
下面是我在应用程序委托中使用的代码,用于创建初始的“标签栏控制器内部的拆分视图”(与前面提到的链接中的建议非常相似)。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSMutableArray *tabArray = [NSMutableArray array];
NSMutableArray *array = [NSMutableArray array];
UISplitViewController *splitViewController = [[UISplitViewController alloc] init];
MainViewController *viewCont = [[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil];
[array addObject:viewCont];
[viewCont release];
viewCont = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
[array addObject:viewCont];
[viewCont release];
[splitViewController setViewControllers:array];
[tabArray addObject:splitViewController];
[splitViewController release];
array = [NSMutableArray array];
splitViewController = [[UISplitViewController alloc] init];
viewCont = [[Master2 alloc] initWithNibName:@"Master2" bundle:nil];
[array addObject:viewCont];
[viewCont release];
viewCont = [[Slave2 alloc] initWithNibName:@"Slave2" bundle:nil];
[array addObject:viewCont];
[viewCont release];
[splitViewController setViewControllers:array];
[tabArray addObject:splitViewController];
[splitViewController release];
// Add the tab bar controller's current view as a subview of the window
[tabBarController setViewControllers:tabArray];
[window addSubview:tabBarController.view];
[window makeKeyAndVisible];
return YES;
}
MainViewController类是一个包含以下方法的UIViewController:
- (IBAction)push_me:(id)sender {
M2 *m2 = [[[M2 alloc] initWithNibName:@"M2" bundle:nil] autorelease];
[self.navigationController pushViewController:m2 animated:YES];
}
此方法(通过接口构建器)附加到在MainViewController.xib中找到的UIButton显然,上面的方法(push_me)应该创建第二个UIViewController (称为m2),并在按下UIButton时将m2推送到拆分视图左侧的视图中。然而,当按钮被按下时,它什么也不做(即使我知道该方法已被调用)。
你觉得我错在哪里了?
蒂娅!
发布于 2010-05-21 19:47:33
您确定MainViewController是UINavigationController的子类吗?
如果您希望能够推送/弹出控制器,那么mainViewController应该是一个navigationController (或子类),然后您可以将控制器(例如TableViewControllers)推送到上面。您可以在默认的splitView项目中看到此结构(打开IB并检查视图)。
这里有一个关于UISplitViewController的不错的教程:http://mobiforge.com/developing/story/developing-split-view-based-apps-ipad
发布于 2016-03-16 09:58:35
创建(多级)主导航控制器的子类,并覆盖以下方法:
- separateSecondaryViewControllerForSplitViewController:
在被覆盖的方法内部执行超类方法,并检查是否要将返回的视图控制器从它中拆分出来,如果不是,则通过调用折叠方法重新合并它:
- collapseSecondaryViewController:forSplitViewController:
Swift中的模板示例:
import UIKit
class MasterNavigationController: UINavigationController {
override func separateSecondaryViewControllerForSplitViewController(splitViewController: UISplitViewController) -> UIViewController? {
// Separate a view controller from master navigation controller
if let secondaryViewController = super.separateSecondaryViewControllerForSplitViewController(splitViewController) {
if /* Check if secondaryViewController is your Detail View Controller (you can check for its class or restorationIdentifier for example) */ {
return secondaryViewController
} else {
// Remerges the separated view controller back to the master navigation controller
super.collapseSecondaryViewController(secondaryViewController, forSplitViewController: splitViewController)
}
}
return nil
}
}
https://stackoverflow.com/questions/2846349
复制相似问题