带有主 UINavigationController 和详细 UINavigationController 的 UISplitViewcontroller

Posted

技术标签:

【中文标题】带有主 UINavigationController 和详细 UINavigationController 的 UISplitViewcontroller【英文标题】:UISplitViewcontroller with master UINavigationController and detail UINavigationController 【发布时间】:2011-01-07 18:26:36 【问题描述】:

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

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

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

我们还需要在细节视图上有一个后退按钮来返回视图控制器堆栈。所以当按下返回时,FormTwoViewController 成为 detailView,FormOneViewController 再次成为主视图。

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

我们现在遇到的问题是双重的

    在详细视图控制器中按下后退按钮时,它什么也不做。似乎处理程序已断开连接或其他什么。 我们没有在纵向模式下获得按钮以在弹出窗口中显示主视图。

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

【问题讨论】:

如果你能展示一些代码会很有帮助。 “它将 FormThreeViewController 推送到 detailNavigationController 上,而 FormTwoViewController 被推送到 masterNavigationController 堆栈上。”确切地知道你是如何做到这一点的至关重要。至于弹出按钮,由你来实现拆分视图控制器的委托来获得它;你是吗? 【参考方案1】:

是的,你可以这样做,但你需要为主视图和细节创建单独的视图控制器 创建新项目作为拆分视图控制器并从 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 是您的表单一,详细视图控制器是您的表单二。

详细视图控制器,即你的表单两个创建类变量 SplitViewAppDelegate *appDelegate; //id 你的应用程序委托变量 设置属性并合成它。

然后在你的形式二

- (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];


相应地设置你的拆分视图。

【讨论】:

你可以从这里下载代码kshitizghimire.com.np/…

以上是关于带有主 UINavigationController 和详细 UINavigationController 的 UISplitViewcontroller的主要内容,如果未能解决你的问题,请参考以下文章

动态查找带有主键的表

如何在本地主机上设置带有和不带有 www 前缀的子域/域

带有主窗体参数的子窗体

带有按钮的 Eclipse android 主菜单启动新活动(IES)

Roku 频道主屏幕上带有搜索按钮的侧边菜单

带有主 UINavigationController 和详细 UINavigationController 的 UISplitViewcontroller