1

他の多くのものと同様に、私はUINavigationControllerで '戻る'ボタンが使用されているときにアクションを実行したいと思います。私は自分自身のボタンを追加したり、外観を偽ったり、viewWillDisappearを使ったり、ビューが消えるような非バックアクションのタグを設定したりするなど、これに代わるいくつかのアプローチを知っています。UINavigationControllerサブクラス - ポップアップをカスタマイズする

しかし、私が試してみたいのは、UINavigationControllerをサブクラス化してpopViewControllerAnimatedに何かを注入することです:

しかし、私は簡単なテストケースを得ることはできません。ここで私が試したことは...

私はUINavigationControllerから継承する新しいクラスCustomNavigationControllerを作成しました。ここでは、私はpopViewControllerAnimated更新:

.H:

#import <UIKit/UIKit.h> 

@interface CustomNavigationController : UINavigationController 

@end 

が.M:インターフェイスビルダーで

#import "CustomNavigationController.h" 

@interface CustomNavigationController() 

@end 

@implementation CustomNavigationController 

- (UIViewController *)popViewControllerAnimated:(BOOL)animated{ 
    NSLog(@"pop!"); 
    return [super popViewControllerAnimated:animated]; 
} 

@end 

を、私はナビゲーションコントローラのクラスを変更: enter image description here

私は何が欠けていますか?このnavコントローラ内のビューをポップするたびに、「ポップ」が記録されることを期待しています。

答えて

1

私はiPhone 5.1シミュレータで非常に同じ実装をテストしましたが、うまくいきました。問題は他の場所にあるようです。

私は、単一ビューのアプリケーションテンプレートから空のプロジェクトを作成し、質問本体に投稿したコードでCustomNavigationControllerクラスを追加しました。 UIButtonを使用して、別のView Controllerをナビゲーションスタックにプッシュする(ストーリーボードのSegueを使用)、 'POP'メッセージが期待通りにコンソールにポストされています。

enter image description here

+0

ありがとう - テストプロジェクトでも同じことが確認されました。私は他の場所でそれを追跡しようとします –

1

UINavigationControllerのドキュメントの最初の段落からです。

UINavigationControllerクラスは、階層コンテンツのナビゲーションを管理する特殊なビュー コントローラを実装しています。この クラスはサブクラス化の対象ではありません。代わりに、アプリケーションのユーザ インターフェイスにコンテンツの階層的な性質を反映させたい場合は、そのまま というインスタンスを使用します。

このようなカスタマイズが必要な場合は、独自のナビゲーションスタイルコントローラを実装する方がよいでしょう。

+0

私もこれを読んでいます。私はちょうど現時点で実験中です。とにかく、「意図されていない」とは、禁止ではなく柔らかい警告として私を襲う。それは「あなたが〜するべきではない...」とは言わない。 私は自分のナビゲーションスタイルのコントローラーだけで、「ポップ」を記録するのは残酷かもしれないと思う(翻訳:どこから始めるべきかわからない)。 –

+4

アップルのUINavigationControllerに関するドキュメントでは、「このクラスは一般的にそのまま使用されますが、iOS 6以降ではサブクラス化される可能性があります。 –

関連する問題