提问人:Piyush Khanna 提问时间:9/3/2022 最后编辑:Piyush Khanna 更新时间:9/5/2022 访问量:128
“取消”按钮 (UIBarButtonItem) 在 iOS 视图控制器中不起作用
"Cancel" button (UIBarButtonItem) not working in iOS view controller
问:
我正在尝试以编程方式在视图控制器的导航栏中添加一个“取消”按钮。该按钮的唯一用途是关闭当前视图控制器并返回到根视图控制器。我正在使用以下 Objective-C 代码来实现此目的:
UIBarButtonItem* cancelBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(onTapCancel:)];
self.controller.navigationItem.leftBarButtonItem = cancelBtn;
self.navigationController = [[UINavigationController alloc] initWithRootViewController:self.controller];
[self.navigationController setNavigationBarHidden:NO animated:YES];
取消按钮功能:
-(void)onTapCancel:(UIBarButtonItem*)item{
NSLog( @"Cancel button Tapped");
UIViewController *rootViewController = [
[[UIApplication sharedApplication] keyWindow] rootViewController];
[rootViewController dismissViewControllerAnimated:YES completion:nil];
}
当我只有一个日志行而不是关闭当前视图控制器的代码时,onTapCancel 函数被调用没有任何问题。但是,当添加关闭视图控制器的代码时(onTapCancel 函数中的第 2-4 行),该函数将停止被调用(我什至在日志中看不到“点击取消按钮”日志行)。可能的原因是什么?
在 onTapCancel 函数中使用时,以下代码有效(每次点击取消按钮时都会打印日志行):
-(void)onTapCancel:(UIBarButtonItem*)item{
NSLog( @"Cancel button Tapped");
}
谢谢!
答:
1赞
The Dreams Wind
9/5/2022
#1
在仔细查看您的代码后,我现在可以看到您尝试关闭应用程序的根控制器。它本身没有任何意义,因为根控制器是不可关闭的,你只能替换它。如果您尝试关闭的控制器位于导航控制器堆栈中,则弹出到根视图控制器应如下所示:
- (void)onTapCancel:(UIBarButtonItem *)item {
[self.navigationController popToRootViewControllerAnimated:YES];
}
如果您以模式方式呈现控制器(从第一个代码片段开始,我假设控制器也用导航控制器包装),那么只需关闭它:
- (void)onTapCancel:(UIBarButtonItem *)item {
[self.navigationController dismissViewControllerAnimated:YES completion:nil];
}
评论