如何覆盖self.navigationItem.backBarButtonItem操作?
我想覆盖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:)];
但不幸的是,它不工作..你有任何想法如何做到这一点?
STILL ,无法直接访问self.navigationItem.backBarButtonItem
。
我结束了使用第一个我试过…并得到我的(自定义)图像..
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"myImage.png"] style:UIBarButtonItemStyleBordered target:self action:@selector(backButtonOverrideAction:)]; [self.navigationItem setLeftBarButtonItem:backButton];
而…
//this two lines of code are still useless, i just feel sorry for them.. [self.navigationItem.backBarButtonItem setTarget:<#(id)#>]; [self.navigationItem.backBarButtonItem setAction:<#(SEL)#>];
你必须做类似的事情
self.navigationItem.backBarButtonItem.target = self; self.navigationItem.backBarButtonItem.action = @selector(backButtonAction:);
在这里你也必须处理控制器的stream行。
您无法更改/分配一个操作backBarButton。 苹果没有给予权限覆盖backBarButton的行动。
1)您可以使用viewdiddisappear方法执行您计划执行的任何事情。 (注意:如果某些情况下视图将会消失,那么它将会被执行,因此请确保这可以在您的场景中应用)
2)你已经尝试过,使用LeftBarButton(如果你想要的图标可以自定义leftBarButton来显示默认的箭头)
您不能分配操作返回BarButton。 解决scheme是创build自定义后退button。
苹果文件摘录说:
为导航项目指定button时,必须使用UIBarButtonItem对象。 如果要在导航栏中显示自定义视图,则必须将这些视图包含在UIBarButtonItem对象中,然后才能将其添加到导航项目中。
这意味着你根本不能使用你的问题的方法-2。 而方法1是正确的做法。
我希望它可以帮助你…
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; }
或者,您可以将左栏button项目添加到导航栏,并为其设置自己的select器function。
在迅速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) }