2

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

定义

拆分视图控制器是这样定义的:

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;

后来我释放了所有可释放的对象。我将SideController用作详细控制器的一种索引。它有一个表格视图,单击每一行我都会更新详细信息的主视图控制器。每个新控制器始终是 UINavigationController 的一个实例。

更新细节

myAppDelegate *delegate = (myAppDelegate *)[[UIApplication sharedApplication] delegate];
UINavigationController *nav = (UINavigationController *)[delegate.splitViewController.viewControllers objectAtIndex:1];
[nav setViewControllers:[NSArray arrayWithObjects:controller, nil]];

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

处理横向

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

- (void)splitViewController:(UISplitViewController*)svc
     willHideViewController:(UIViewController *)aViewController
          withBarButtonItem:(UIBarButtonItem*)barButtonItem
       forPopoverController:(UIPopoverController*)pc

而且,当我将新控制器推送到导航控制器时,默认的后退按钮将出现在工具栏中。在这种情况下,我应该如何处理按钮创建?

更新

请不要告诉我没有人遇到过这种问题!您如何开发 iPad 应用程序?呜咽...

4

3 回答 3

1

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

在拆分视图控制器委托中,我以splitViewController:willHideViewController:withBarButtonItem:forPopoverController这种方式实现了 : 方法:

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

在这里,我展示了当且仅当导航控制器未显示后退按钮或其他自定义左按钮项时,将显示代表侧视图控制器的弹出视图的条形按钮项。

希望这对某人有帮助!

于 2011-05-10T20:14:42.853 回答
0

我相信 Alterplay 的 Slava Bushtruk 已经找到了您正在寻找的东西,并在他的APSplitViewController库中使用了它。

于 2011-05-23T19:10:00.413 回答
0

我认为您没有得到任何好的答案的原因是很难理解您的问题,即您的问题可能更清楚。所以首先让我看看我是否正确理解了这个问题。当您在导航控制器上按下某些东西并且应该同时显示后退按钮和拆分视图按钮时,您是否不知道如何处理这种情况?

如果是这样,我们解决该问题的方法是拆分视图按钮仅在导航控制器的根中可见。无论如何,侧控制器通常只与详细视图的根视图控制器相关。

如果我误解了您的问题或我的解决方案不适用于您的项目,请告诉我。

编辑:所以如果你坚持这样做,这里有一种方法:

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

viewWillDisappear:

[self setToolbarHidden:YES animated:animated];

和上viewWillAppear:

[self setToolbarHidden:NO animated:animated];

现在你有一个工具栏,你可以添加任何东西。好吧,任何可以添加到 aUIToolbar的东西,几乎是任何东西。

于 2011-05-26T12:42:55.450 回答