2013-03-14 69 views
1

我有兩個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方法。任何提示?

感謝

尼古拉

+1

的http://計算器。 com/questions/1214965/setting-action-back-button-in-navigation-controller/3445994#3445994 – 2013-03-14 09:00:26

回答

1

不要讓我錯了,但我認爲你需要清楚推UINavigationController的流行。

導航控制器通過在控制器的視圖堆棧上打開/關閉/打開/關閉視圖來管理視圖。當您按下某個項目時,當前視圖從屏幕向左滑動,新視圖從右側滑過。當然這些動畫可以根據你的意願改變。

我認爲這是你完全需要的。

將此置於vcA中您想從vcA推送vcB的位置。

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

} 
0

你做的錯誤。先推送到vcB並在vcB viewDidLoad方法把這個代碼。

UIBarButtonItem *customBackButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:@selector(handleBack)]; 
self.navigationItem.backBarButtonItem = custombackBackButton; 

,並把這個在VCB:

-(void) handleBack{ 
NSlog(@"Going back to vcA"); 
} 
+0

這是行不通的。要更改vcB backButton的標題,您必須從vcA執行此操作,而不是從vcB viewDidLoad執行此操作。 – 2013-03-14 09:01:16

+0

我知道這對程序員來說不是那麼用戶友好,但要改變vcB backButton的標題,你必須從vcA而不是從vcB viewDidLoad來做。 Yor技巧只有在您將customBackButton設置爲self.navigationItem.leftBarButtonItem(矩形)時才起作用。我想要一個真正的後退按鈕調用自定義方法,箭頭形狀,並且只能在vcA中更改它的標題,但不會調用選擇器。 – 2013-03-14 09:07:35

+0

如果你想改變後退按鈕的標題,然後在你的VCA把這個。 - (void)viewWillDisappear:(BOOL)animated { self.navigationItem.title = @「Back」; } – Yashesh 2013-03-14 09:08:54

1

使用竅門由威廉Jockusch給出Setting action for Back Button

,也可以作爲每Updating the Navigation Bar

  • 如果新的頂部級視圖控制器有一個自定義左欄按鈕項目,該項目被顯示。要指定自定義左欄按鈕項目,請設置視圖控制器導航項目的leftBarButtonItem屬性。
  • 如果頂級視圖控制器沒有自定義左欄按鈕項目,但前一個視圖控制器的導航項目在其backBarButtonItem屬性中具有有效項目,則導航欄會顯示該項目。

所以,如果你想定製選擇你需要寫這裏面VCB不是在VBA

vcB.m

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    UIBarButtonItem *customBackButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" 
                     style:UIBarButtonItemStyleBordered 
                     target:self 
                     action:@selector(handleBack)]; 
    self.navigationItem.backBarButtonItem = customBackButton; 
} 

-(void) handleBack 
{ 
    NSlog(@"Going back to vcA"); 
} 

注:

UINavigationController Class Reference

當此導航項目緊靠 堆棧中的頂層項目時,導航控制器會從此導航項目導出 導航欄的後退按鈕。當此屬性爲零時,導航項目使用其標題屬性中的值創建 適當的後退按鈕。如果您想爲後退按鈕指定自定義圖像或 標題,則可以將自定義欄按鈕項目 (包含您的自定義標題或圖像)分配給此屬性。當配置您的酒吧按​​鈕項目 時,不要分配一個自定義的視圖; 導航項目忽略無論如何,在後欄按鈕 中的自定義視圖。

這裏被提到,如果要指定自定義圖像或標題的後退按鈕,你可以指定一個自定義欄按鈕項(與您的自定義標題或圖像)但是卻忽略了自定義視圖。所以你的選擇器沒有調用。

0

您不能修改backBarButtonItems動作,這是做默認(回)動作,你應該做你的自定義的東西在leftBarButtonItems

在vcBs類補充一點:

- (void)viewWillAppear:(BOOL)animated 
{ 
    UIBarButtonItem *customBackButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" 
                     style:UIBarButtonItemStyleBordered 
                     target:self 
                     action:@selector(handleBack)]; 
    self.navigationItem.leftBarButtonItem = customBackButton; 
} 

- (void)handleBack 
{ 
    NSLog(@"back"); 
}