代码之家  ›  专栏  ›  技术社区  ›  4thSpace wkw

向导航栏添加后退按钮

  •  10
  • 4thSpace wkw  · 技术社区  · 14 年前

    我在uiviewcontroller中添加了导航栏。它仅从另一个uiviewcontroller显示。我想要一个像箭头形状的左后按钮,就像普通的导航栏后退按钮一样。似乎我只能通过ib添加一个bar按钮。我猜back按钮需要以编程方式添加。我该怎么做有什么建议吗?

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

    3 回复  |  直到 8 年前
        1
  •  13
  •   Alex Reynolds    14 年前

    如果使用导航控制器:

    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 用于制作自定义条形图按钮的组件。

        2
  •  7
  •   Lena Bru    10 年前

    我是按下面的方法做的

    在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;
    }
    
        3
  •  0
  •   Wael Showair    8 年前

    解决此问题的另一种方法是设置导航栏的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)