UIBarButton 不会显示在我的 UINavigationController
Posted
技术标签:
【中文标题】UIBarButton 不会显示在我的 UINavigationController【英文标题】:UIBarButton won't show in my UINavigationController 【发布时间】:2012-06-22 15:49:21 【问题描述】:我想制作一个带有导航栏和表格视图的简单视图。所以我创建了一个UINavigationController
的子类,并在其中添加了一个UITableView
。我的也是UITableViewDataSource
和UITableViewDelegate
。现在我想在导航栏中添加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
,它有自己的表格视图]
viewDidLoad
的MyController
中自定义导航栏。
例如
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的主要内容,如果未能解决你的问题,请参考以下文章