Ipad 详细信息中使用UINavigationController时的横向UISplitViewController

Ipad 详细信息中使用UINavigationController时的横向UISplitViewController,ipad,uinavigationcontroller,uisplitviewcontroller,uitoolbar,ipad-2,Ipad,Uinavigationcontroller,Uisplitviewcontroller,Uitoolbar,Ipad 2,我正在开发一个iPad/通用应用程序,我面临着在UISplitViewController中将UINavigationController作为主要细节视图处理的问题。我想知道的是,当处于横向时,如何将默认的侧控制器按钮添加到细节控制器 定义 拆分视图控制器的定义如下: splitViewController = [[UISplitViewController alloc] init]; SideController *root = [[[SideController alloc] init]

我正在开发一个iPad/通用应用程序,我面临着在UISplitViewController中将UINavigationController作为主要细节视图处理的问题。我想知道的是,当处于横向时,如何将默认的侧控制器按钮添加到细节控制器

定义 拆分视图控制器的定义如下:

splitViewController = [[UISplitViewController alloc] init];

SideController *root = [[[SideController alloc] init] autorelease];
DetailController *detail = [[DetailController alloc] init];
InserisciDatiController *calcolo = [[[InserisciDatiController alloc]
                                     initWithNibName:@"InserisciDatiNuovi"
                                     bundle:[NSBundle mainBundle]]
                                    autorelease];

UINavigationController *rootNav = [[[UINavigationController alloc] initWithRootViewController:root]autorelease];
UINavigationController *calcoloNav = [[[UINavigationController alloc] initWithRootViewController:calcolo] autorelease];

splitViewController.viewControllers = [NSArray arrayWithObjects:rootNav, calcoloNav, nil];
splitViewController.delegate = detail;
- (void)splitViewController:(UISplitViewController*)svc
     willHideViewController:(UIViewController *)aViewController
          withBarButtonItem:(UIBarButtonItem*)barButtonItem
       forPopoverController:(UIPopoverController*)pc
{
    barButtonItem.title = NSLocalizedString(@"menu", nil);

    myAppDelegate *app = (myAppDelegate *)[[UIApplication sharedApplication] delegate];

    UINavigationController *nav = [app.splitViewController.viewControllers objectAtIndex:1];
    UIViewController *ctrl = [nav.viewControllers objectAtIndex:0];

    if (!ctrl.navigationItem.backBarButtonItem && !ctrl.navigationItem.leftBarButtonItem) {
        ctrl.navigationItem.leftBarButtonItem = barButtonItem;
    }
}
然后我释放了所有可释放的对象。 我使用
SideController
作为细节控制器的索引。它有一个表视图,单击每一行可以更新详图的主视图控制器。每个新控制器始终是UINavigationController的一个实例

更新细节 当用户点击侧视图控制器中的一行时,我使用这段代码来更新细节控制器

处理景观方向 当我想添加默认工具栏按钮来显示隐藏的侧视图控制器时,我想知道如何处理横向方向。我无法使用以下方法让“详细信息导航”控制器的工具栏添加按钮:

- (void)splitViewController:(UISplitViewController*)svc
     willHideViewController:(UIViewController *)aViewController
          withBarButtonItem:(UIBarButtonItem*)barButtonItem
       forPopoverController:(UIPopoverController*)pc
此外,当我将新控制器按到导航控制器时,默认的后退按钮将出现在工具栏中。在这种情况下,我应该如何处理按钮创建

更新
请不要告诉我,从来没有人有过这样的问题!你如何开发iPad应用程序?呜呜…

我找到了一种对某人有用的方法,尽管我并不认为这是一种处理导航控制器的干净方法

在split view controller委托中,我用BarbuttonItem:forPopoverController实现了splitViewController:willHideViewController:withBarButtonItem:forPopoverController:方法如下:

splitViewController = [[UISplitViewController alloc] init];

SideController *root = [[[SideController alloc] init] autorelease];
DetailController *detail = [[DetailController alloc] init];
InserisciDatiController *calcolo = [[[InserisciDatiController alloc]
                                     initWithNibName:@"InserisciDatiNuovi"
                                     bundle:[NSBundle mainBundle]]
                                    autorelease];

UINavigationController *rootNav = [[[UINavigationController alloc] initWithRootViewController:root]autorelease];
UINavigationController *calcoloNav = [[[UINavigationController alloc] initWithRootViewController:calcolo] autorelease];

splitViewController.viewControllers = [NSArray arrayWithObjects:rootNav, calcoloNav, nil];
splitViewController.delegate = detail;
- (void)splitViewController:(UISplitViewController*)svc
     willHideViewController:(UIViewController *)aViewController
          withBarButtonItem:(UIBarButtonItem*)barButtonItem
       forPopoverController:(UIPopoverController*)pc
{
    barButtonItem.title = NSLocalizedString(@"menu", nil);

    myAppDelegate *app = (myAppDelegate *)[[UIApplication sharedApplication] delegate];

    UINavigationController *nav = [app.splitViewController.viewControllers objectAtIndex:1];
    UIViewController *ctrl = [nav.viewControllers objectAtIndex:0];

    if (!ctrl.navigationItem.backBarButtonItem && !ctrl.navigationItem.leftBarButtonItem) {
        ctrl.navigationItem.leftBarButtonItem = barButtonItem;
    }
}
这里,我展示了一个条形按钮项,它将显示代表侧视图控制器的弹出视图,当且仅当导航控制器未显示后退按钮或另一个自定义左按钮项时


希望这对别人有帮助

我相信Alterplay的Slava Bushtruk已经找到了你要找的东西,并在他的图书馆里使用了它。

我认为你没有得到任何好答案的原因是很难理解你的问题,也就是说,你的问题可能更清楚。 首先让我看看我是否正确理解了这个问题。当您按下导航控制器上的某个按钮并同时显示“后退”按钮和“分割视图”按钮时,是否存在不知道如何处理该情况的问题

如果是这样的话,我们解决这个问题的方法是“拆分视图”按钮仅在导航控制器的根目录中可见。侧面控制器通常只与局部视图的根视图控制器相关

如果我误解了你的问题或我的解决方案不适用于你的项目,请让我知道

编辑:因此,如果您坚持这样做,以下是一种方法:

toolbar = [[UIToolbar alloc] initWithFrame:(UIInterfaceOrientationIsPortrait(interfaceOrientation)) ? CGRectMake(0, 0, 768, 44) : CGRectMake(0, 0, 703, 44)];
toolbar.autoresizingMask = UIViewAutoresizingFlexibleWidth;
[self.navigationController.navigationBar addSubview:toolbar];
视图上,将消失:

[self setToolbarHidden:YES animated:animated];
[self setToolbarHidden:NO animated:animated];
而在
视图上会出现:

[self setToolbarHidden:YES animated:animated];
[self setToolbarHidden:NO animated:animated];

现在您有了一个工具栏,可以向其中添加任何内容。嗯,任何可以添加到
UIToolbar
的东西,几乎都是任何东西。

嗯,这不是一个适合我的解决方案。在他的实现中,他总是让两个控制器都可见,而不关心方向。不同的是,我希望侧控制器在纵向模式下隐藏,但我也想知道处理工具栏中的后退按钮和侧控制器按钮的最佳解决方案…顺便说一句,谢谢你的提示!这可能对其他项目有帮助@marzapower啊,很抱歉,很明显,我只关注了你问题的一部分。链接不再可用!你正确地理解了这个问题。你在这里的建议是我已经尝试过的,而且几乎已经完成了。我真的很想知道是否有一种方法可以同时显示两个按钮。@marzapower当然可以,但如果两个按钮挨在一起,看起来不是很奇怪吗?我还认为把按钮放在右边会很奇怪。不奇怪的是,当后退按钮可见时,根本不显示按钮。你不同意吗?但是我的回答已经解决了你的建议,不是吗?此外,我有一个视图控制器,它的根控制器已经在左侧显示了一个按钮(一个垃圾桶)。我如何在那里放置多个图标?@marzapower我已经用一个解决方案更新了答案,回答了您的问题。我可以向你保证它是有效的,我之前没有分享这一点的唯一原因是我想确保这是你真正想要的。@marzapower,只是一个旁注。如果你在一个小时内奖励奖金,我将创造一个新的个人记录,记录你在一天内获得的大多数代表。如果你能做到这一点,你会让我高兴的。:)