2010-05-17 302 views
10

我已經將導航欄添加到UIViewController。它僅從另一個UIViewController顯示。我想要一個左側後退按鈕,其形狀類似於箭頭,就像正常的導航欄後退按鈕一樣。看來我只能通過IB添加一個欄按鈕。我猜想後退按鈕需要以編程方式添加。有關我應該如何做的任何建議?添加後退按鈕到導航欄

目前,在RootController中,我通過簡單地執行addSubView來推送另一個UIViewController(viewB)。在viewB中,我想顯示導航欄。該應用程序是基於視圖,而不是基於導航控制器。

回答

13

如果您使用的是導航控制器:

MyViewController *_myViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]; 
[[self navigationController] pushViewController:_myViewController animated:YES]; 
UIBarButtonItem *_backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleDone target:nil action:nil]; 
self.navigationItem.backBarButtonItem = _backButton; 
[_backButton release], _backButton = nil; 
[_myViewController release], _myViewController = nil; 

如果你不使用導航控制器,窺視Three20 style組件進行自定義欄按鈕。

+0

這是沒有做任何事情。 – 4thSpace 2010-05-17 04:23:39

+0

你需要調整它到你的特定項目的代碼。您可能想要編輯您的問題以包含相關的代碼片段,即您在第一個視圖控制器中的位置並推送第二個視圖控制器。 – 2010-05-17 04:51:52

+0

我已經更新了這個問題。謝謝。 – 4thSpace 2010-05-17 05:00:20

7

我已經做了以下方式

在viewDidLoad方法我有這樣的代碼:

UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 41)]; 
    navBar.delegate = self; 

    UINavigationItem *backItem = [[UINavigationItem alloc] initWithTitle:@"Back"]; 
    [navBar pushNavigationItem:backItem animated:NO]; 
    [backItem release]; 

    UINavigationItem *topItem = [[UINavigationItem alloc] initWithTitle:@"Your Title"]; 
    [navBar pushNavigationItem:topItem animated:NO]; 
    topItem.leftBarButtonItem = nil; 
    [topItem release]; 

    [self.view addSubview:navBar]; 
    [navBar release]; 

然後在頭添加符合UINavigationBarDelegate協議和執行委託方法是這樣的:

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item 
{ 
    //if you want to dismiss the controller presented, you can do that here or the method btnBackClicked 

    return NO; 
} 
+0

您是否在您發送給Apple的任何應用程序中使用過它?如果是,他們批准了嗎? – viplezer 2013-08-15 21:47:46

+0

是的,這種方法沒有使用私有API – 2017-12-21 01:08:07

0

解決此問題的另一種方法是設置導航欄的項目屬性,而不是連續將條形項目推送到導航欄酒吧堆棧:

//Define myFrame based on your needs 
let navigationBar = UINavigationBar(frame: myFrame) 
let backItem = UINavigationItem(title: "Back") 
let topItem = UINavigationItem(title: "My Title") 
navigationBar.setItems([backItem,topItem], animated: false)