我想覆盖self.navigationItem.backBarButtonItem
的目标和行动,
我试过了:
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(backButtonOverrideAction:)];
[self.navigationItem setLeftBarButtonItem:backButton];
它正在运行,但我想使用默认箭头:
我也试过了:
UIBarButtonItem *backButton = self.navigationItem.backBarButtonItem;
[backButton setTarget:self];
[backButton setAction:@selector(backButtonOverrideAction:)];
但不幸的是它不起作用..你知道怎么做吗?
答案 0 :(得分:10)
仍然,无法直接访问更改 目标 和 操作 {1}}。
我最终使用了我尝试的第一个...并获得了我的(自定义)图像..
self.navigationItem.backBarButtonItem
而......
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"myImage.png"]
style:UIBarButtonItemStyleBordered
target:self
action:@selector(backButtonOverrideAction:)];
[self.navigationItem setLeftBarButtonItem:backButton];
答案 1 :(得分:3)
您无法将操作分配给BarButton。 解决方案是创建自定义后退按钮。
答案 2 :(得分:1)
适用于11.3:
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
let BackItemIndex = 2
if let subViews = navigationController?.navigationBar.subviews,
subViews.count > BackItemIndex {
navigationController?.navigationBar.subviews[BackItemIndex].subviews.first?.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(doPerformAction(_:))))
}
}
@objc func doPerformAction(_ sender: Any) {
// some code
}
此解决方案基于搜索活动子视图,直到对应于backBarButtonItem,然后添加UITapGestureRecognizer,以便它捕获元素上的事件。
答案 3 :(得分:0)
摘自Apple Doc说:
指定导航项目的按钮时,必须使用 UIBarButtonItem对象。如果要在中显示自定义视图 导航栏,您必须将这些视图包装在UIBarButtonItem中 将对象添加到导航项之前的对象。
这意味着您根本无法使用问题中的方法-2。方法-1是正确的方法。
答案 4 :(得分:0)
我希望它可以帮助你...
BOOL IsOK_Clicked;
-(void)viewDidAppear:(BOOL)animated
{
IsOK_Clicked = NO;
}
-(void)viewDidDisappear:(BOOL)animated
{
if(!IsOK_Clicked){
//Do what you want in Back Click
}
}
- (IBAction)btnCheckOut:(id)sender {
IsOK_Clicked = YES;
}
或您可以将左栏按钮项添加到导航栏并为其设置自己的选择器功能。
答案 5 :(得分:0)
在swift 3.1中
override func viewDidLoad() {
// set navigationItem.leftBarButtonItem return to Root
let backToRootVCButton = UIBarButtonItem.init(title: "Back", style: UIBarButtonItemStyle.plain, target: self, action: #selector(backToRootVCAction))
self.navigationItem.setLeftBarButton(backToRootVCButton, animated: true)
}
func backToRootVCAction() {
_ = self.navigationController?.popToRootViewController(animated: true)
}
答案 6 :(得分:-1)
您必须执行类似
的操作self.navigationItem.backBarButtonItem.target = self;
self.navigationItem.backBarButtonItem.action = @selector(backButtonAction:);
这里你必须处理控制器的弹出窗口。