3 回答
TA贡献1963条经验 获得超6个赞
尝试使用以下代码使用VIewWillDisappear方法来检测是否按下了NavigationItem的“后退”按钮:
-(void) viewWillDisappear:(BOOL)animated
{
if ([self.navigationController.viewControllers indexOfObject:self]==NSNotFound)
{
// Navigation button was pressed. Do some stuff
[self.navigationController popViewControllerAnimated:NO];
}
[super viewWillDisappear:animated];
}
或还有另一种获取导航按钮的操作的方法。
为后退按钮的UINavigationItem创建自定义按钮。
例如:
在ViewDidLoad中:
- (void)viewDidLoad
{
[super viewDidLoad];
UIBarButtonItem *newBackButton = [[UIBarButtonItem alloc] initWithTitle:@"Home" style:UIBarButtonItemStyleBordered target:self action:@selector(home:)];
self.navigationItem.leftBarButtonItem=newBackButton;
}
-(void)home:(UIBarButtonItem *)sender
{
[self.navigationController popToRootViewControllerAnimated:YES];
}
斯威夫特:
override func willMoveToParentViewController(parent: UIViewController?)
{
if parent == nil
{
// Back btn Event handler
}
}
TA贡献1856条经验 获得超17个赞
迅速
override func didMoveToParentViewController(parent: UIViewController?) {
if parent == nil {
//"Back pressed"
}
}
TA贡献1891条经验 获得超3个赞
也许此答案不适合您的解释,但不适合您的标题。当您想知道何时点击上的后退按钮时,此功能很有用UINavigationBar。
在这种情况下,您可以使用UINavigationBarDelegate协议并实现以下方法之一:
- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item;
- (void)navigationBar:(UINavigationBar *)navigationBar didPopItem:(UINavigationItem *)item;
当didPopItem方法被调用,那是因为你要么挖后退按钮,或者你使用[UINavigationBar popNavigationItemAnimated:]方法和导航栏确实流行的项目。
现在,如果您想知道是什么动作触发了该didPopItem方法,则可以使用标志。
使用这种方法,我不需要手动添加带有箭头图像的左栏按钮项即可使其类似于iOS后退按钮,并且能够设置我的自定义目标/操作。
让我们来看一个例子:
我有一个具有页面视图控制器和自定义页面指示器视图的视图控制器。我还使用自定义UINavigationBar来显示标题,以了解我在哪一页上,以及使用“后退”按钮返回上一页。而且我还可以滑动到页面控制器上的上一页/下一页。
#pragma mark - UIPageViewController Delegate Methods
- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed {
if( completed ) {
//...
if( currentIndex > lastIndex ) {
UINavigationItem *navigationItem = [[UINavigationItem alloc] initWithTitle:@"Some page title"];
[[_someViewController navigationBar] pushNavigationItem:navigationItem animated:YES];
[[_someViewController pageControl] setCurrentPage:currentIndex];
} else {
_autoPop = YES; //We pop the item automatically from code.
[[_someViewController navigationBar] popNavigationItemAnimated:YES];
[[_someViewController pageControl] setCurrentPage:currentIndex];
}
}
}
因此,我实现了UINavigationBar委托方法:
#pragma mark - UINavigationBar Delegate Methods
- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item {
if( !_autoPop ) {
//Pop by back button tap
} else {
//Pop from code
}
_autoPop = NO;
return YES;
}
在这种情况下,我使用shouldPopItem了该按钮,因为该弹出窗口具有动画效果,并且我想立即处理后退按钮,而不要等到转换完成。
- 3 回答
- 0 关注
- 597 浏览
添加回答
举报