UIBarButton不会显示在我的UINavigationController中

我想用一个导航栏和一个表格视图做一个简单的视图。 所以我创build了一个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; 

显示视图没有错误,但没有button。 我该如何显示呢?

贾法尔,

正如苹果医生build议你应该避免子类UINavigationController

这个类不适用于子类。

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

  • 创build你的控制器(比如说MyController )来扩展UIViewController并在这里添加表。 将您的控制器设置为该表的委托和数据源。 如果你已经创build了XIB,你需要一个出口的表视图。

[ PS 。 你也可以子类化一个UITableViewController ,它有一个表视图它自己]

  • MyController viewDidLoad中定制导航栏。

例如

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

你也可以自定义标题。

例如

 self.title = @"Your custom title"; 
  • 在你的代码的某个地方创build一个UINavigationController并添加一个MyController的实例作为根视图控制器。

例如:

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

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

如果您只是想在导航栏的左侧显示一个项目,则可以使用leftBarButtonItem ,它将在该控制器上显示一个正常的条形button。 它将是矩形的,而不是像普通的后退button箭头。

你怎么试试这个:

 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;