首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >UISplitView左侧的多级导航控制器

UISplitView左侧的多级导航控制器
EN

Stack Overflow用户
提问于 2010-05-17 10:25:48
回答 2查看 9.1K关注 0票数 3

我正在尝试做一些类似(但不完全像)在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推送到拆分视图左侧的视图中。然而,当按钮被按下时,它什么也不做(即使我知道该方法已被调用)。

你觉得我错在哪里了?

蒂娅!

EN

回答 2

Stack Overflow用户

发布于 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

票数 0
EN

Stack Overflow用户

发布于 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
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2846349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档