2015-05-29 137 views
1

我要重寫self.navigationItem.backBarButtonItem目標行動如何覆蓋self.navigationItem.backBarButtonItem操作?

我想:

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" 
                    style:UIBarButtonItemStyleBordered 
                    target:self 
                    action:@selector(backButtonOverrideAction:)]; 
[self.navigationItem setLeftBarButtonItem:backButton]; 

這是工作,但我想使用默認的箭頭:

enter image description here

我也試過了:

UIBarButtonItem *backButton = self.navigationItem.backBarButtonItem; 
[backButton setTarget:self]; 
[backButton setAction:@selector(backButtonOverrideAction:)]; 

但不幸的是它不工作..你有任何想法如何做到這一點?

+1

你想要什麼不同的動作?後退按鈕具有用戶期望的具體行動,因此更改它不是一個好主意。 – rdelmar

+0

是的,我知道,但我會像瀏覽器的後退按鈕.. 即使'BarButtonSystemItem'不具有後退按鈕的圖標..嘖..蘋果.. – 0yeoj

回答

9

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)#>]; 
+0

工作就像一個魅力。謝謝! – DocAsh59

0

你必須做一些像

self.navigationItem.backBarButtonItem.target = self; 
self.navigationItem.backBarButtonItem.action = @selector(backButtonAction:); 

在這裏你必須辦理該控制器還彈出。

+0

不,我已經試過這..隱而不宣「T工作..我已經在我的問題解釋這個.. – 0yeoj

0

您無法更改/分配動作到backBarButton。 Apple沒有給予權限來覆蓋backBarButton的操作。

1)您可以使用viewdiddisappear方法執行您計劃執行的任何操作。 (注意:如果某些情況下視圖會消失,那麼它會被執行,因此請確保它可以應用於您的場景中)

2)您已經嘗試使用LeftBarButton(如果圖標你想要你可以自定義leftBarButton來顯示默認的箭頭)

0

你不能指定動作返回BarButton。 解決方案是創建自定義後退按鈕。從Apple Doc

0

摘錄說:

當爲導航項目按鈕,您必須使用 的UIBarButtonItem對象。如果要在 導航欄中顯示自定義視圖,則必須在將這些視圖添加到導航項目之前,將這些視圖封裝在UIBarButtonItem對象中。

這意味着你根本無法使用方法-2從你的問題。而方法1是正確的做法。

0

我希望它可以幫助你......

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; 
} 

或者您可以在左欄按鈕項添加到導航欄和你自己的選擇器功能設置它。

0

在SWIFT 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) 
}