2015-03-31 95 views
1

我试图捕获后退按钮的事件并触发didClickBarButtonnLeft:方法。UIBarButtonItem事件处理不起作用

下面的代码不起作用:

[self.navigationItem.leftBarButtonItem setTarget:self]; 
[self.navigationItem.leftBarButtonItem setAction:@selector(didClickBarButtonnLeft:)]; 

但这确实:

UIBarButtonItem* barButtonLeft; 
barButtonLeft = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:SIDE_VIEW_BAR_BUTTON] 
                style:UIBarButtonItemStylePlain 
                target:self 
                action:@selector(didClickBarButtonnLeft:)]; 

    self.navigationItem.leftBarButtonItem = barButtonLeft; 

    [self.view setUserInteractionEnabled:YES]; 

的一点是,我不希望替换默认后退按钮图标。这两个脚本均在-(void)viewDidAppear:(BOOL)animated方法内。

回答

0

我有一些事情可以帮助。首先,要访问的navigationItem后退按钮的最好的办法是说:

self.navigationItem.backBarButtonItem 

尝试使用的,与其self.navigationItem.leftBarButtonItem,看看有什么变化。

其次,如果你想要做的是检测时,视图控制器正在从导航堆栈中删除,则可以覆盖viewWillDisappear:并执行它像下面这样:

- (void)viewWillDisappear:(BOOL)animated 
{ 
    [super viewWillDisappear:animated]; 
    if (self.isMovingFromParentViewController) 
    { 
     // call your back button pressed method 
    } 
} 
+0

这不是一个事件处理程序。 – Ricardo 2015-03-31 13:48:05

+0

它仍然以同样的方式工作。 viewWillDisappear:当视图控制器离开屏幕时被调用。从文档:isMovingFromParentViewController“返回一个布尔值,指示视图控制器正在从其父项中移除的过程中。”因此,达到相同的效果。 – 2015-03-31 13:55:17

+0

除非,当然,你正试图重写后退按钮正在做什么。在这种情况下,或者尝试我刚才提到的选项1,或者只是隐藏后退按钮并创建一个看起来像后退按钮的新的酒吧按钮项目。 – 2015-03-31 13:57:59