我有两个UIViewcontrollers,在UINavigationController中将它们称为vcA和vcB。
我希望vcB有一个触发某些代码的自定义后退按钮,目标是做一些自定义动画
在vcA中,我输入以下代码:
UIViewController *vcB = [UIViewController alloc] init]
UIBarButtonItem *customBackButton = [[UIBarButtonItem alloc] initWithTitle:@"Back"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(handleBack)];
self.navigationItem.backBarButtonItem = custombackBackButton;
[self.navigationController pushViewController: vcB animated: YES];
然后我在vcA和vcB中添加了以下代码:
-(void) handleBack
{
NSlog(@"Going back to vcA");
}
永远不会调用handleback方法。有什么提示吗?
谢谢
尼古拉
最佳答案
不要误会我的意思,但我认为您需要明确了解UINavigationController的推式弹出。
导航控制器通过在控制器的视图堆栈上推入/弹出视图来管理视图。按下项目时,当前视图从屏幕向左滑出,新视图从右侧滑出。当然,可以根据您的意愿更改这些动画。
我认为这是您完全需要的。
将其放在要从vcA推送vcB的vcA中。
UIViewController *vcB = [UIViewController alloc] init];
[self.navigationController pushViewController: vcB animated: NO];
[UIView transitionWithView:self.navigationController.view
duration:0.8
options:UIViewAnimationOptionTransitionFlipFromRight
animations:nil
completion:nil];
在vcB中,您可以制作一个barbuttonitem
UIBarButtonItem *addButton = [[[UIBarButtonItem alloc] initWithTitle:@"BackToVcA"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(addAction:)] autorelease];
self.navigationItem.rightBarButtonItem = addButton;
在addActionMethod中:您可以将以下代码放回所需的动画中
- (void)addAction:(id)sender
{
UIViewController *vcA = [UIViewController alloc] init];
[[self retain] autorelease];
[self.navigationController pushViewController: vcA animated: NO];
[UIView transitionWithView:self.navigationController.view duration:0.8 options:UIViewAnimationOptionTransitionFlipFromLeft animations:nil completion:nil];
[self.navigationController popViewControllerAnimated:NO];
}