1
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:self action:@selector(backButtonTapped)];

这就是我正在使用的代码。当我点击后退按钮时,该backButtonTapped方法永远不会被调用(我在其上放置了一个断点),我可以通过命令单击backButtonTapped文本跳转到该方法,所以我知道它就在那里。

但是,如果我将其设置为leftBarButtonItem,则不会显示任何按钮,但点击该区域会使我返回。

4

2 回答 2

2

Using为下一个被推送到导航堆栈的视图控制器(例如 SecondViewController)self.navigationItem.backBarButtonItem设置后退栏按钮项,而不是当前视图控制器(例如 FirstViewController)。

如果要为当前位于堆栈上的视图控制器设置后退按钮,请像leftBarButtonItem在当前视图控制器中那样设置它,或者backBarButtonItem在将新视图推送到堆栈上的视图控制器中使用。

使用时没有显示按钮的原因leftBarButtonItem是因为您将标题留空而不是将其设置为“返回”之类的内容

例子:

// Inside SecondViewController.m
//
// Customize left bar button item for SecondViewController
//
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self.navigationController action:@selector(popToRootViewControllerAnimated:)];

或者

// Inside FirstViewController.m
//
// Customize the back bar button item for SecondViewController
//
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];

请注意,您不必为它设置目标或操作,backBarButtonItem因为它会做正确的事情。

于 2013-10-03T21:59:25.390 回答
0

在 viewDidLoad 方法中尝试以下操作:

if ( [self.navigationController.viewControllers count] > 1 )
{
    UIButton *backBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    [backBtn setAdjustsImageWhenHighlighted:NO];
    [backBtn setShowsTouchWhenHighlighted:YES];
    [backBtn setContentHorizontalAlignment:UIControlContentHorizontalAlignmentLeft];
    UIImage *backBtnImage = [UIImage imageNamed:@"back.png"]; // <-- replace with your own image
    [backBtn setImage:backBtnImage forState:UIControlStateNormal];
    [backBtn addTarget:self action:@selector(backButtonTapped) forControlEvents:UIControlEventTouchUpInside];
    backBtn.frame = CGRectMake(0, 0, 40, 40);
    UIBarButtonItem *backBarBtnItem = [[UIBarButtonItem alloc] initWithCustomView:backBtn];
    self.navigationItem.leftBarButtonItem = backBarBtnItem;
}
于 2013-10-03T22:15:51.340 回答