2012-08-27 65 views
0

我有UINavigationController,我必須保持默認後退按鈕「後退箭頭樣式」我只是想問,如果我可以更改後退按鈕動作,而不建立新的和改變其風格如何更改uinavigation控制器後退按鈕動作

+0

我不明白,你想改變它的風格,還是它的動作? – rdurand

+0

我只想改變行動 –

+0

新動作是什麼?因爲如果您只想跳過視圖堆棧中的視圖(例如),則不需要新的按鈕。 – rdurand

回答

1

AFAIK你不能改變默認的後退按鈕的作用本身,但您可以將UIBarButtonItem放置爲leftBarButtonItem並指定您自己的操作。

如果有一個leftBarButtonItem被定義,那麼會顯示它,而不是默認的後退按鈕。

但是,當做這樣的技巧時,請記住GUI準則。

+0

是的,同意蘋果的HIG,改變一個標準的UI元素的行動可能會從AppStore被拒絕的應用程序! – rdurand

+1

是的。除非該動作只是增加了一些功能,probaby甚至對用戶不可見,並且不會改變該應用的一般行爲。沒有必要在該按鈕或底層視圖控制器的名稱中有「BACK」。這只是建議。但它應該從導航的角度回到那裏。 –

+1

@OmarFreewan,如果你真的只需要添加一些功能,那麼考慮使用相應視圖控制器的viewWillDisappear或viewWillAppear(或相應的DID方法)。但是,它們可能並不符合您的需求,因爲當視圖出現或消失時,它們總是被稱爲。 –

1

號如果你想自定義後退按鈕,你必須創建一個自定義的UIBarButtonItem,然後將其分配給相應的屬性:

self.navigationItem.backBarButtonItem = myCustomBackItem; 
0

UINavigationBar中的後退按鈕會在您推送新的UIView時自動生成。爲了讓您自定義後退按鈕,可以使用自定義視圖創建新的UIToolBar + UIBarButtonItem。

以下代碼是在UIToolBar中使用自定義UIBarButtonItem的示例。

// create button 
UIButton* backButton = [UIButton buttonWithType:101]; // left-pointing shape! 
[backButton addTarget:self action:@selector(backAction) forControlEvents:UIControlEventTouchUpInside]; 
[backButton setTitle:@"Back" forState:UIControlStateNormal]; 

// create button item -- possible because UIButton subclasses UIView! 
UIBarButtonItem* backItem = [[UIBarButtonItem alloc] initWithCustomView:backButton]; 

// add to toolbar, or to a navbar (you should only have one of these!) 
[toolbar setItems:[NSArray arrayWithObject:backItem]]; 
navItem.leftBarButtonItem = backItem; 

下面的鏈接是PSD格式的iOS按鈕的設計作進一步修改。

http://www.chrisandtennille.com/pictures/backbutton.psd

0

您可以自定義按鈕,可以使在其上行動,但你不能改變默認的返回按鈕動作.....

self.navigationItem.leftBarButtonItem = getBackBtn; 
0

的UINavigationController的將消息發送給它的委託時,它推送並彈出一個ViewController。

你可以找到當返回按鈕被通過實施以下並在.h文件中添加<UINavigationControllerDelegate>按下

-(void)viewWillAppear:(BOOL)animated{ 
    [super viewWillAppear:animated]; 
    self.navigationController.delegate = self; 
} 

-(void)viewDidDisappear:(BOOL)animated{ 
    [super viewDidDisappear:animated]; 
    self.navigationController.delegate = nil; 
} 

-(void)navigationController:(UINavigationController *)navigationController 
    willShowViewController:(UIViewController *)viewController 
        animated:(BOOL)animated{ 

    //Test here if the View Controller being shown next is right below the current 
    // ViewController in the navigation stack 
    // 
    //Test by: 
    // 1. comparing classes, or 
    // 2. checking for a unique tag that you previously assigned, or 
    // 3. comparing against the [navigationController viewControllers][n-2] 
    //  where n is the number of items in the array 

    if ([viewController isKindOfClass:NSClassFromString(@"ViewControllerClassThatGetsPushedOnBACK")){ 
     //back button has been pressed 
    } 

    if (viewController.tag == myUniqueTagIdentifier){ 
     //back button has been pressed 
    } 

    if ([navigationController.viewControllers[navigationController.viewControllers.count-2]==viewController]){ 
     //back button has been pressed 
    } 
} 

Apple Docs UINavigationController Class Reference:

根視圖控制器是在索引0中陣列,後視圖 控制器位於索引n-2,頂層控制器位於索引n-1, ,其中n是陣列中的項目數。

+0

@Jesse_Gumpo你怎麼知道你會倒退?在我的所有測試中,提供的viewController是要呈現的視圖控制器,其他常見的地方(topViewController,visibleViewController)都已經顯示了viewController顯示的相同的東西。當用戶備份時,我試圖做一些特定的事情,而不是當他們進入這個視圖控制器時,所以知道「方向」是至關重要的。有一個隱藏的_disappearingViewController,我敢打賭,我有需要,但它不是一個官方的API .... – tobinjim

+0

@tobinjim answer updated –

相關問題