2010-05-17 305 views
10

我已经将导航栏添加到UIViewController。它仅从另一个UIViewController显示。我想要一个左侧后退按钮,其形状类似于箭头,就像正常的导航栏后退按钮一样。看来我只能通过IB添加一个栏按钮。我猜想后退按钮需要以编程方式添加。有关我应该如何做的任何建议?添加后退按钮到导航栏

目前,在RootController中,我通过简单地执行addSubView来推送另一个UIViewController(viewB)。在viewB中,我想显示导航栏。该应用程序是基于视图,而不是基于导航控制器。

回答

13

如果您使用的是导航控制器:

MyViewController *_myViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]; 
[[self navigationController] pushViewController:_myViewController animated:YES]; 
UIBarButtonItem *_backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleDone target:nil action:nil]; 
self.navigationItem.backBarButtonItem = _backButton; 
[_backButton release], _backButton = nil; 
[_myViewController release], _myViewController = nil; 

如果你不使用导航控制器,窥视Three20 style组件进行自定义栏按钮。

+0

这是没有做任何事情。 – 4thSpace 2010-05-17 04:23:39

+0

你需要调整它到你的特定项目的代码。您可能想要编辑您的问题以包含相关的代码片段,即您在第一个视图控制器中的位置并推送第二个视图控制器。 – 2010-05-17 04:51:52

+0

我已经更新了这个问题。谢谢。 – 4thSpace 2010-05-17 05:00:20

7

我已经做了以下方式

在viewDidLoad方法我有这样的代码:

UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 41)]; 
    navBar.delegate = self; 

    UINavigationItem *backItem = [[UINavigationItem alloc] initWithTitle:@"Back"]; 
    [navBar pushNavigationItem:backItem animated:NO]; 
    [backItem release]; 

    UINavigationItem *topItem = [[UINavigationItem alloc] initWithTitle:@"Your Title"]; 
    [navBar pushNavigationItem:topItem animated:NO]; 
    topItem.leftBarButtonItem = nil; 
    [topItem release]; 

    [self.view addSubview:navBar]; 
    [navBar release]; 

然后在头添加符合UINavigationBarDelegate协议和执行委托方法是这样的:

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item 
{ 
    //if you want to dismiss the controller presented, you can do that here or the method btnBackClicked 

    return NO; 
} 
+0

您是否在您发送给Apple的任何应用程序中使用过它?如果是,他们批准了吗? – viplezer 2013-08-15 21:47:46

+0

是的,这种方法没有使用私有API – 2017-12-21 01:08:07

0

解决此问题的另一种方法是设置导航栏的项目属性,而不是连续将条形项目推送到导航栏酒吧堆栈:

//Define myFrame based on your needs 
let navigationBar = UINavigationBar(frame: myFrame) 
let backItem = UINavigationItem(title: "Back") 
let topItem = UINavigationItem(title: "My Title") 
navigationBar.setItems([backItem,topItem], animated: false)