iOS 9后barButtonItem没有显示在导航控制器上

时间:2015-12-28 15:37:43

标签: ios objective-c iphone storyboard uibarbuttonitem

here描述的问题类似,但我的TabBar实际上显示BackButton上的NavigationBar不是。{在问题中,我提供了解决问题的答案的链接,即NavigationController中有NavigationController,我没有,所以这是一个不同的问题。

我的storyboard的基本流程是登录(UIView) - TabBarUITabBarController) - NavigationControllerUINavigationController) - 实际可见屏幕(UITableViewController) - 发生问题的新TableViewUITableViewController)。

在新的实际可见screenTableView顶部的NavigationBar显示正常,我可以点击BackBarButton应该在的一般区域它会返回,但没有BackBarButton项可见。

我尝试更改颜色,在之前的ViewController中分配颜色,确保它可见,等等。并且没有一个显示Back Button。它似乎在那里,但没有显示。

有什么想法吗?从与我的问题类似的另一个问题来看,这似乎是iOS 9特定的事情。

从查看调试视图层次结构

编辑我可以看出后面的按钮实际上在那里,但它上面没有标签或后退箭头。 如何让后面的标签可见?

编辑2 以下是视图控制器的viewDidLoad方法,其中应显示后退按钮。

- (void)viewDidLoad {
    [super viewDidLoad];

    self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@" " style:UIBarButtonItemStylePlain target:nil action:nil];

    [self.navigationItem.backBarButtonItem setTintColor:[UIColor whiteColor]];
    // Other unimportant stuff
}

我对这个视图控制器的看法是通过带有Push segue的故事板。代码如下。

- (void)segueToUser: (UIButton*)button {
    long row = button.tag;
    PFObject *PFQuote = [_recent quoteAtIndex:(row-1)/2];
    PFUser *u = [PFQuote objectForKey:@"creator"];
    _send = u;
    [self performSegueWithIdentifier:@"showUser" sender:self];
}

以下是与prepareForSegue

位于同一文件中的segueToUser
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"showUser"]) {


        BRETTFUserTableViewController *bfutvc = [segue destinationViewController];
        self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@" " style:UIBarButtonItemStylePlain target:nil action:nil];
        bfutvc.us = _send;
    }
}

这是我的故事板的一部分图片。 第一个视图是tabView 第二个视图是navView 第三次视图是tableView 第四个视图是tableView

由于似乎没有人找到解决方案,我将提供更多信息。从我深入挖掘Debug View Hierarchy,我发现了一些关于backButton的更多信息。我可以看到后面的箭头完好无损,旁边有一个NSString似乎是nil,我不知道为什么它是零,但这就是我发现的。这是我发现的其他图片。

enter image description here

3 个答案:

答案 0 :(得分:0)

在你的

  
      
  • (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
  •   

你已经写了一个代码行

 self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@" " style:UIBarButtonItemStylePlain target:nil action:nil];

在上面的行中你设置了标题" " 空字符串

使用要在后退项目上显示的标题,而不是空字符串。 fr ex:

self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];

检查它可能有帮助。

添加故事板的图像,我如何在导航控制器中嵌入视图控制器。

enter image description here

或者如果您已将导航外观代码放在应用中的任何位置,那么也会发布该代码。

答案 1 :(得分:0)

在您的 viewDidLoad prepareForSegue 方法中,您拥有以下内容:

    self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@" " style:UIBarButtonItemStylePlain target:nil action:nil];

通过没有标签的按钮替换导航控制器的默认后退按钮。

您应该只删除这两行以获得默认的后退按钮。

答案 2 :(得分:0)

我终于解决了这个问题。为了实现这一点,我必须进入第一个tableViewController的导航栏并将后退按钮标题设置为Back,然后设置色调颜色(默认为清除),现在它可以正常工作。