【问题标题】:Cancel button not showing up in UINavigationController in modal for iPad取消按钮未显示在 iPad 模式中的 UINavigationController 中
【发布时间】:2014-02-24 11:42:41
【问题描述】:

我正在尝试在 iPad 的导航栏中为模式添加一个取消按钮。

我正在使用以下代码:

    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:abPersonController];
    navController.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel
                                                                                          target:self
                                                                                          action:@selector(dismissModal)];
    [self presentViewController:navController animated:YES completion:nil];

但由于某种原因,取消按钮没有显示。

使用 spark 检查器,我看到取消按钮应该在的位置,但它被隐藏了,当你在 iPad 模拟器上运行它时,你看不到取消按钮或返回指示器。

我尝试将后退指示器的隐藏属性设置为 NO,但没有任何显示。

编辑:我可以让它工作的唯一方法是在完成块中添加按钮:

[self presentViewController:navController animated:YES completion:^{abPersonController.navigationItem.leftBarButtonItem = doneButton;}];

但是这个解决方案看起来很糟糕,因为完成按钮是在模式已经出现在屏幕上之后弹出的。有没有其他方法可以获得它,所以它不必在完成块中?

编辑:

        UIViewController *dummyView = [[UIViewController alloc] init];
        UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:dummyView];
        [navController pushViewController:abPersonController animated:NO];
        abPersonController.navigationItem.hidesBackButton = YES;
        abPersonController.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel
                                                                                              target:self
                                                                                              action:@selector(dismissModal)];
        navController.modalPresentationStyle = UIModalPresentationFormSheet;
        navController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
        [self presentViewController:navController animated:YES completion:nil];
        navController.view.superview.bounds = CGRectMake(0, 0, 320, 480);

【问题讨论】:

  • 您需要将按钮应用到您放入导航控制器的视图控制器的navigationItem,而不是导航控制器本身。

标签: ios ipad uinavigationcontroller uinavigationbar


【解决方案1】:

应该是 backBarButtomItem 而不是 leftBarButtomItem。

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:abPersonController];
navController.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel
                                                                                      target:self
                                                                                      action:@selector(dismissModal)];
[self presentViewController:navController animated:YES completion:nil];

【讨论】:

  • 仅供参考:这个答案搞砸了
【解决方案2】:

怎么样:

1.

navController.navigationBar.topItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel
                                                                                                      target:self
                                                                                                      action:@selector(dismissModal)];

2.

abPersonController.navigationItem.lefBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel
                                                                                                   target:self
                                                                                                   action:@selector(dismissModal)];

或者...

abPersonController对象的类-viewDidLoad(或init)你可以这样做:

[self.navigationItem setLeftBarButton:[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel
                                                                                    target:self
                                                                                    action:@selector(dismissModal)]];

【讨论】:

  • 或者干脆abPersonController.navigationItem.lefBarButtonItem = ...
  • @rmaddy:是的,也是。 (现在将其包含在答案中)谢谢
  • 我尝试了 1 和 2,但它们都不起作用。我将在我的主要问题上附加一个视图层次结构。
  • @codenamepenryn : 嗯...甚至在abPersonController-viewDidLoad 中都没有?
  • abPersonController 是 Apple 制造的,所以我只能访问 h 文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多