我有两个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];

}

10-08 08:46