0

私は自身の戻るボタン、タイトルなどで独自のナビゲーションコントローラにオーバーライドしたいと思います。しかし、View Controllerをプッシュした後、デフォルトでは、前のクラスで継承されたスタックの最後のビューのナビゲーションバーが表示されます。ナビゲーションコントローラをプッシュした後でオーバーライドする方法は?

これは、ヘッダーファイルのNavBarViewControllerを継承する私の最初のクラスと仮定します。

//ListingDetailViewController.h 
@interface ListingDetailViewController : NavBarViewController 

と、ListingDetailViewControllerの内側に、私は、ビューをプッシュ:これはまだ、再びタイトル、私は戻るボタンを無効にしようとしたにも関わらず、ListingDetailViewControllerと同じナビゲーションコントローラにもたらすでしょう

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

ChatListViewControllerのviewdidLoadとviewWillAppearにあります。これはChatListViewControllerのヘッダーです:

//ChatListViewController.h 
@interface ChatListViewController : IPChatListViewController 

私はこれをどのように達成できますか?どんな助けでも大歓迎です。ありがとうございました。

答えて

0

viewDidLoadが継承されたナビゲーションバーを再利用するまでは、viewDidAppearのボタンをオーバーライドして解決策を見つけました。だから、その後

-(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クラスを使用します。お使いのベースのコントローラで、このコードを貼り付けます。

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

は、お使いのベースクラスでこのメソッドを含める:

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

あなたはこの基本VCから、あなたのビューコントローラ(ないナビゲーションコントローラ)をサブクラス化することを確認した場合、それは意志自動的に戻るボタンを置き換えます。

+0

さて、このコードを書いて、あなたの努力のためにどうもありがとうございました。私はこのBase VCから私のVCをサブクラス化することによって何を意味するのか分からなかったのですか?あなたがチェックすると、私はChatListViewControllerのIPChatListViewControllerをサブクラス化するからです。だから、私はどのように私の場合に上記のコードブロックを変更することができますか?ありがとう。 – Umitk

+0

これらのメソッドをChatListViewControllerに配置することはできます。私はいつも私のプロジェクトにベースビューコントローラクラスを持っています。私はそのクラスからすべてのView Controllerをサブクラス化しようとします。しかし、いくつかのビューコントローラで使用できない場合は、これらのコードをいつでも手動で追加できます。 –

関連する問題