ipad - 带有主 UINavigationController 和详细 UINavigationController 的 UISplitViewcontroller

标签 ipad uisplitviewcontroller ios-4.2

我们在 UISplitViewController 应用程序中有我们需要的特定行为。我们有以下 3 个 View 的层次结构

  • FormOneViewController - 在 MasterView 中初始化的 TableViewController
  • FormTwoViewcontroller - TableViewCotnroller initalised in detailView
  • FormThreeViewcontroller - 尚未显示。

  • 当用户在 FormTwoViewController 中选择一个项目时,我们希望 FormThreeViewCONtroller 出现在 detailView 中,并且 FormTwoViewController(当前的详细 View )成为 masterView。

    我们还需要在详细 View 上有一个后退按钮来返回 View Controller 堆栈。因此,当按下返回时,FormTwoViewController 成为 detailView,FormOneViewController 再次成为主视图。

    我们尝试使用 UISPlitViewcontroller 以及 masterNavigationController 和 detailNavigationController 来实现这一点。我们有初始阶段工作,当应用程序启动时 View 正确显示,我们选择 FormTwoViewController 项目并将 FormThreeViewController 推送到 detailNavigationController 和 FormTwoViewController 推送到 masterNavigationController 堆栈。

    我们现在遇到的问题是双重的
  • 当在详细 View Controller 中按下后退按钮时,它什么也不做。似乎处理程序已断开连接或其他什么。
  • 我们没有在纵向模式下获得按钮以在弹出窗口中显示主视图。

  • 有没有人有任何关于如何做到这一点的例子或任何帮助将不胜感激。

    最佳答案

    是的,您可以这样做,但是您需要为主视图和详细信息创建单独的 View Controller
    创建新项目作为 Split View Controller 并从 xib 中删除 Split View,以便我们从代码创建 Split View。

    - (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 是您的表单一,详细 View Controller 是您的表单二。

    详细 View Controller ,即您的表单两个创建类变量
    SplitViewAppDelegate *appDelegate;//id 你的应用程序委托(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];
    
    }
    

    并用于弹出 View Controller
    -(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];
    
    }
    

    相应地设置你的 Split View。

    关于ipad - 带有主 UINavigationController 和详细 UINavigationController 的 UISplitViewcontroller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4628910/

    相关文章:

    ios - 使用后台应用程序在 iOS 设备之间中继数据

    ios - 我们是否仍支持 iPhone 3.5 英寸屏幕以满足应用商店指南?

    swift - 触发显示详细信息 Segue 后主视图 Controller 栏按钮丢失

    ios - UISplitViewController如何显示主视图?

    iphone - 如何在单击按钮时弹出默认的 iPhone 键盘

    iphone - 使用 UIMarkupTextPrintFormatter 时是否可以控制顶部和底部页边距?

    iphone - 类似杂志的版式是如何制作的?

    iphone - 通过操作将 PanGesture 应用于另一个类中的 uiview

    ios - UISplitViewController 未正确旋转

    iphone - iPad : Problem changing the background color of Grouped TableView in iOS SDK 4. 2