UIBarButton 不会显示在我的 UINavigationController

Posted

技术标签:

【中文标题】UIBarButton 不会显示在我的 UINavigationController【英文标题】:UIBarButton won't show in my UINavigationController 【发布时间】:2012-06-22 15:49:21 【问题描述】:

我想制作一个带有导航栏和表格视图的简单视图。所以我创建了一个UINavigationController 的子类,并在其中添加了一个UITableView。我的也是UITableViewDataSourceUITableViewDelegate。现在我想在导航栏中添加UIBarButton,但它不起作用:

UIBarButtonItem *anotherButton = [[UIBarButtonItem alloc] initWithTitle:[[Translator instance] getTranslation:@"Back"] 
                                                                  style:UIBarButtonItemStylePlain 
                                                                 target:self.parentViewController  
                                                                 action:@selector(dismissFiltersModal:)];          
self.navigationItem.backBarButtonItem = anotherButton;

显示视图但按钮没有错误。我该怎么做才能显示它?

【问题讨论】:

【参考方案1】:

贾法尔,

按照 Apple 文档的建议,您应该避免继承 UINavigationController

该类不用于子类化。

这么说,你可以按照这些简单的步骤(给你一些建议):

创建扩展UIViewController 的控制器(比如MyController)并在此处添加表。将您的控制器设置为该表的委托和数据源。如果您是由 xib 创建的,则需要一个用于表格视图的插座。

[附注。你也可以继承UITableViewController,它有自己的表格视图]

viewDidLoadMyController 中自定义导航栏。

例如

UIBarButtonItem* myButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(someSelector)];
self.navigationItem.leftBarButtonItem = myButton;

您还可以自定义标题。

例如

self.title = @"Your custom title";
在您的代码中的某处创建UINavigationController 并添加MyController 的实例作为根视图控制器。

例如:

MyController* myCtr = // alloc-init here
UINavigationController* nc = [[UINavigationController alloc] initWithRootViewController:myCtr];

【讨论】:

很好用 :) 由于我将该视图呈现为模态视图,是否有提供方法将调用者引用保存在 MyController 中?因为如果我使用 self.parentViewController 它引用 UINavigationController nc 而不是我呈现模态视图的对象(我猜这是正常的)。【参考方案2】:

backBarButtonItem 应该设置在前一个视图控制器上,而不是当前要显示的控制器上。例如,如果您在视图 A 上,从它导航到 B,在 B 内将显示 A 的 backBarButtonItem而不是 B。

如果您只想在导航栏的左侧显示一个项目,您可以改用leftBarButtonItem,它将在该控制器上显示一个普通的栏按钮。它将是矩形的,而不是像普通后退按钮那样的箭头。

【讨论】:

【参考方案3】:

你试试这个怎么样:

UIButton* backButton = [UIButton buttonWithType:101]; // left-pointing shape!
        [backButton addTarget:self action:@selector(dismissFiltersModal:) forControlEvents:UIControlEventTouchUpInside];
        [backButton setTitle:@"Back" forState:UIControlStateNormal];

// create button item -- 
UIBarButtonItem* backItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];

// add to toolbar
self.navigationItem.leftBarButtonItem = backItem;

【讨论】:

我试过了,但按钮没有指向左的形状。文本只是向右移动了一点:/

以上是关于UIBarButton 不会显示在我的 UINavigationController的主要内容,如果未能解决你的问题,请参考以下文章

uibarbutton 项目未显示 uibutton

UIBarButton 背景图片显示问题

在 iOS 中导航期间更改 UITabBar

UIBarButton 不执行动作

调用 pushViewController 时,后退按钮会覆盖上一个 UIBarButton

带有 CustomView 和边框的 UIBarButton