10

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

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

4

3 回答 3

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 样式组件以制作自定义栏按钮。

于 2010-05-17T03:58:10.000 回答
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];

然后在 header 中添加对 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;
}
于 2011-10-26T06:49:04.213 回答
0

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

//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)
于 2016-06-28T02:30:25.867 回答