当重用相同的类时,导航控制器不显示后退按钮

时间:2012-06-18 18:07:40

标签: iphone uitableview uinavigationbar back-button pushviewcontroller

我正在做一个基于导航的应用程序。 让我解释一下应用程序。 在程序加载表视图中将显示3个选项,如:

  • 饭店
  • 餐馆
  • 咖啡馆

如果用户选择上述任何选项,它将导航到另一个表视图并显示子选项。并且它将继续上升到6到7个级别。 所以我在tableView的类(Sales)的didSelectRowAtIndexPath:中创建了它自己的对象并使用[self.navigationController pushViewController:myViewController animated:YES];我正在创建另一个视图并绑定数据库中的数据。这对我来说很好,问题是。我没有得到导航栏上自动显示的“后退”按钮。

我的实现就像这样

@implementation Sales

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath  {
 Sales *myViewController  = [[Sales alloc] initWithNibName:@"Sales"];
 [self.navigationController pushViewController:myViewController animated:YES];
 //Do other stuffs here
}

@end

像这样我正在显示所有级别。但当我在任何选项内导航时,我没有得到后退按钮。 (通常如果我导航到酒店,它将显示一个detailView并在导航栏上显示一个后退按钮,但在这种情况下,这不会发生)。 我认为问题在于创建同一个类的对象并显示它,但我无法创建如此多的类和视图(总共约43个级别)。 如何解决此问题(如何在导航栏上显示后退按钮)? 我的方法是好的还是有这个问题的替代解决方案? 提前谢谢。

2 个答案:

答案 0 :(得分:2)

推送同一类视图控制器的方法很好。错误必须在其他地方。

  • 检查视图控制器是否有title。这是子视图控制器可见时在后退按钮上显示的文本。如果该文本为nil,则不会有后退按钮。

答案 1 :(得分:2)

当您创建“后退”按钮时,它是“下一个”级别。因此,“当前导航控制器”的后退按钮是在上一级创建的...是的,这有点令人困惑。

好吧,我在“iLessons iLearned: How to Define Custom backBarButtonItem”上写了这篇博文,但这里是创建后退按钮的示例代码:

- (void)viewDidLoad
{
[super viewDidLoad];
UIBarButtonItem *backButton =
  [[UIBarButtonItem alloc]
    initWithTitle:@"My Back"
    style:UIBarButtonItemStyleBordered
    target:nil
    action:nil];
self.navigationItem.backBarButtonItem = backButton;
[backButton release];
}

现在只需确保在正确的navigationController中使用它!