我们在UISplitViewController应用程序中需要一些行为。我们有以下3个视图的层次结构
当用户在FormTwoViewController中选择一个项目时,我们希望FormThreeViewCOntroller出现在detailView中,而FormTwoViewController(当前的详细信息视图)将成为masterView。
我们还需要在详细视图上有一个后退按钮来返回视图控制器堆栈。因此,当按下后退时,FormTwoViewController将成为detailView,FormOneViewController将再次成为主视图。
我们尝试使用UISPlitView控制器以及masterNavigationController和detailNavigationController来实现它。我们有初始阶段工作,在应用程序启动时正确显示视图,我们选择FormTwoViewController项,它将FormThreeViewController推送到detailNavigationController,FormTwoViewController被推送到masterNavigationController堆栈。
我们现在遇到的问题是双重的
有没有人有任何关于如何做到这一点的例子或任何帮助,我们将不胜感激。
答案 0 :(得分:10)
是的,你可以这样做但你需要为master和detail创建单独的视图控制器 创建新项目作为拆分视图控制器并从xib中删除拆分视图,以便我们从代码创建拆分视图。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after app launch.
self.splitViewController =[[UISplitViewController alloc]init];
self.rootViewController=[[RootViewController alloc]init];
self.detailViewController=[[DetailViewController alloc]init];
UINavigationController *rootNav=[[UINavigationController alloc]initWithRootViewController:rootViewController];
UINavigationController *detailNav=[[UINavigationController alloc]initWithRootViewController:detailViewController];
// Add the split view controller's view to the window and display.
self.splitViewController.viewControllers=[NSArray arrayWithObjects:rootNav,detailNav,nil];
self.splitViewController.delegate=detailViewController;
[self.window addSubview:self.splitViewController.view];
[self.window makeKeyAndVisible];
return YES;
}
其中rootviewcontroller是你的形式一个,详细视图控制器是你的形式二。
详细视图控制器即ur表单两个创建类变量 SplitViewAppDelegate * appDelegate; // id ur app delegate变量 设置属性并合成它。
然后以你的形式两个
- (void)viewDidLoad {
self.appDelegate = (SplitViewAppDelegate *)[[UIApplication sharedApplication] delegate];
}
最后推动你的形式三
- (IBAction)pushViewController:(id)sender{
NSLog(@"%@",self.appDelegate.splitViewController.viewControllers);
RootLevel1 *rootLevel1 =[[RootLevel1 alloc]init];//create form 1 root vc and assign form 1 vc
DetailLevel1 <UISplitViewControllerDelegate>*detailLevel1=[[DetailLevel1 alloc]init];
UIBarButtonItem *backButton = [[UIBarButtonItem alloc]
initWithTitle: @"Home"
style:UIBarButtonItemStylePlain
target:self
action:@selector(home)];
rootLevel1.navigationItem.leftBarButtonItem=backButton;
[self.appDelegate.splitViewController viewWillDisappear:YES];
[[self.appDelegate.splitViewController.viewControllers objectAtIndex:0] pushViewController:rootLevel1 animated:YES];
[[self.appDelegate.splitViewController.viewControllers objectAtIndex:1] pushViewController:detailLevel1 animated:YES];
self.appDelegate.splitViewController.delegate = detailLevel1;
[self.appDelegate.splitViewController viewWillAppear:YES];
}
用于弹出视图控制器
-(void)home {
[self.splitViewController viewWillDisappear:YES];
[[self.appDelegate.splitViewController.viewControllers objectAtIndex:0]popViewControllerAnimated:YES];
[[self.appDelegate.splitViewController.viewControllers objectAtIndex:1]popViewControllerAnimated:YES];
UIViewController <UISplitViewControllerDelegate>*viewController=[[self.appDelegate.splitViewController.viewControllers objectAtIndex:1] visibleViewController];
self.splitViewController.delegate=viewController;
[self.splitViewController viewWillAppear:YES];
}
相应地设置你的splitview delgeate。