5

iOS 4.2+ 用のアプリを開発しています。my をサブクラス化してUINavigationController2 つ挿入UIImageViewし、ナビゲーション バーをカスタムにしました。すべてうまくいっていますが、少し問題があります。私はカスタムを作成UIBarButtonItemし、View Controller内にそれらを配置しました:

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:backButton];

それも機能しますが、問題は、これを機能させるには、次から呼び出す必要があることです。

 - (void)viewDidAppear:(BOOL)animated ;

したがって、アニメーションの後にのみ表示され、カスタマイズされたボタンが置き換えられる1秒前に、カスタマイズされていないボタンが表示されます。

(試してみましviewWillAppearたが、ナビゲーションバーに何も追加されません)

この問題を解決できる解決策があれば教えてください。

PS: IB を使用したことはありません。すべてプログラムで作成されています。

フランスからありがとう!

編集1:これは、何も表示されなかったコードですviewWillAppear:

- (void)viewWillAppear:(BOOL)animated  {
    [self setTitle:@"Jeu"];

    //Bouton testflight
    TIFButton *testFeedbackButton = [[TIFButton alloc]init];
    [testFeedbackButton setTitle: @"Envoyer un Feedback" forState:UIControlStateNormal];
    [testFeedbackButton addTarget:self action:@selector(launchFeedback) forControlEvents:UIControlEventTouchUpInside];

    UIBarButtonItem *testFeedback = [[UIBarButtonItem alloc] initWithCustomView:testFeedbackButton];

    self.navigationItem.rightBarButtonItem = testFeedback;  

    TIFBackButton *backButton = [[TIFBackButton alloc]init];
    [backButton setTitle: @"Retour" forState:UIControlStateNormal];
    [backButton addTarget:self action:@selector(popToPrecedentViewController) forControlEvents:UIControlEventTouchUpInside];

    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:backButton];
}
4

3 に答える 3

19

2つのViewController、AとBがあり、Aが一番上にあるときにBをスタックにプッシュし、Bが一番上にあるときに表示される戻るボタンをカスタマイズするとします。

通常、これを行う方法は、ViewControllerAを設定することですnavigationItem.backBarButtonItem

代わりに、ViewController Bに、ナビゲーションバーの左側にあるカスタムボタンを設定して、そのボタンを指定しますnavigationItem.leftBarButtonItem

ViewController AnavigationItem.backBarButtonItemを設定しなくても、デフォルトでデフォルトの戻るボタンが表示されることを除いて、このアプローチは問題なく実装されています。そのため、そのボタンはおそらくカスタムの戻るボタンの上に表示されます。

ViewController Bを設定すればnavigationItem.hidesBackButton = YES、問題はないはずです。

また、将来、カスタムの戻るボタンを実装する場合は、のnavigationItem.backBarButtonItem代わりに設定して実装する必要がありnavigationItem.leftBarButtonItemます。調整する必要があるのは、このアプローチでは、たとえば、ViewController Aを使用して、 ViewControllerBがnavigationItemにあるときに表示される戻るボタンを変更することです。

于 2012-02-15T21:17:36.683 に答える
4
UIBarButtonItem *backButton = [UIBarButtonItem new];

[backButton setTitle:@"Back"];

[[self navigationItem] setBackBarButtonItem:backButton];

このコードは、前のView Controllerで言及する必要があり、デフォルトの戻るボタンだけが次のView Controllerにありました。

楽しみ!!!

于 2013-12-19T12:38:35.750 に答える