0

我想用自己的後退按鈕,標題等覆蓋到我自己的導航控制器。但在我推視圖控制器後,默認情況下顯示在前一課中繼承的堆棧中最後一個視圖的導航欄。如何覆蓋導航控制器後推?

讓我們假設這是我的頭文件中繼承NavBarViewController的第一個類;

//ListingDetailViewController.h 
@interface ListingDetailViewController : NavBarViewController 

和,裏面ListingDetailViewController,我推鑑於:

//ListingDetailViewController.m 
ChatListViewController *chatList= [[ChatListViewController alloc]init]; 
[self.navigationController pushViewController:chatList animated:YES]; 

因此,這仍然會在導航控制器相同ListingDetailViewController帶來的,儘管我試圖重寫後退按鈕再次,標題在ChatListViewController的viewdidLoad和viewWillAppear中。這是ChatListViewController的標題:

//ChatListViewController.h 
@interface ChatListViewController : IPChatListViewController 

我該如何做到這一點?任何幫助深表感謝。謝謝。

回答

0

我找到了解決方案,通過重寫viewDidAppear中的按鈕,因爲直到viewDidLoad它將重新使用繼承的導航欄。所以,

-(void)viewDidAppear:(BOOL)animated { 
[self overwriteBackButton]; 
} 

然後:

- (void)overwriteBackButton { 
UIImage *backNormal = [UIImage imageNamed:@"backButton"]; 
_navBarLeftButton = [OpenSansButton buttonWithType:UIButtonTypeCustom]; 
_navBarLeftButton.frame = CGRectMake(10, 10, 35, 35); 
[_navBarLeftButton setImage:backNormal forState:UIControlStateNormal]; 
[_navBarLeftButton addTarget:self action:@selector(backToList) forControlEvents:UIControlEventTouchUpInside]; 
[self.navigationController.navigationBar addSubview:_navBarLeftButton]; 
} 

它被觸發:

-(void)backToList 
{ 
[self.navigationController popViewControllerAnimated:YES]; 
} 
1

我爲此使用了一個BaseViewController類。在你的基地控制器這段代碼粘貼:如果你要確保你從這個基地VC它會繼承您的視圖控制器(沒有導航控制器)

- (UIBarButtonItem *)createBackButton 
{ 

    UIBarButtonItem *negativeSeperator = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; 
    negativeSeperator.width = 0; 
    UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"navigation_back_button.png"] style:UIBarButtonItemStylePlain target:self.navigationController action:@selector(popViewControllerAnimated:)]; 

    [item setTintColor:[UIColor whiteColor]]; 
    self.navigationItem.leftBarButtonItems = [NSArray arrayWithObjects:negativeSeperator,item, nil]; 
    return item; 
} 

if (self.navigationController.viewControllers) 
{ 
    if (self.navigationController.viewControllers.count > 1) 
    { 
     [self createBackButton]; 
    } 
    else 
    { 
     //[self createSideBarButton]; 
    } 
} 
else 
{ 
    //[self createSideBarButton]; 
} 

包括在你的基類這種方法自動替換後退按鈕。

+0

好,非常感謝你爲你的努力編寫這些代碼。我不明白你是什麼意思,我從這個基礎VC的子類我的VC?因爲,如果你檢查,我在ChatListViewController的子類IPChatListViewController。那麼,我怎樣才能將這段代碼修改成我的情況呢?謝謝。 – Umitk

+0

你仍然可以把這些方法放到你的ChatListViewController中。我的項目中總是有一個基本視圖控制器類。我嘗試從該類繼承我的所有視圖控制器。但是如果你不能在幾個視圖控制器中使用它,你總是可以手動添加這些代碼。 –

相關問題