为啥我的后退按钮在 iOS 7 上不起作用?

Posted

技术标签:

【中文标题】为啥我的后退按钮在 iOS 7 上不起作用?【英文标题】:Why does my back button not work on iOS 7?为什么我的后退按钮在 iOS 7 上不起作用? 【发布时间】:2013-10-03 21:20:51 【问题描述】:
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:self action:@selector(backButtonTapped)];

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

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

【问题讨论】:

方法是否有参数?选择器是否有效? 对不起,错字,不,它没有。 选择器有效是什么意思? 如果选择器无效,应用会崩溃。 哦,它只是一个popViewController。 【参考方案1】:

使用 self.navigationItem.backBarButtonItemnext 视图控制器(例如 SecondViewController)设置后退栏按钮项目,该控制器被推送到导航堆栈,而不是 当前 视图控制器(例如 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 设置目标或操作,因为它会做正确的事情。

【讨论】:

【参考方案2】:

在您的 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;

【讨论】:

以上是关于为啥我的后退按钮在 iOS 7 上不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

自定义后退按钮图像在导航栏上不起作用

为啥 tailwind css 在 iPhone ios 设备上不起作用?

为啥外部链接在构建后在 phonegap 应用程序上不起作用

为啥我的停止按钮在这个 javascript 音频播放器上不起作用?

为啥我的输入在移动设备上不起作用?

为啥远程推送通知在 iOS 10 上不起作用?