1

他の多くの人と同じように、「戻る」ボタンが UINavigationController で使用されたときにアクションを実行したいと思います。独自のボタンを追加して外観を偽装しようとしたり、viewWillDisappear を使用したり、ビューを非表示にするすべての非バック アクションにタグを設定したりするなど、これに対するいくつかの代替アプローチを認識しています。

しかし、私が試してみたいのは、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

インターフェイス ビルダーで、ナビゲーション コントローラーのクラスを変更しました。 ここに画像の説明を入力

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

4

2 に答える 2

1

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

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

この種のカスタマイズが必要な場合は、独自のナビゲーションスタイルコントローラーを実装することをお勧めします。

于 2012-04-11T16:22:46.963 に答える
1

iPhone 5.1 シミュレーターでまったく同じ実装をテストしたところ、問題なく動作します。問題は別の場所にあるようです。

シングルビュー アプリケーション テンプレートから空のプロジェクトを作成し、質問本文に投稿したコードを使用して CustomNavigationController クラスを追加しました。UIButton を使用して別のビュー コントローラーをナビゲーション スタックにプッシュし (ストーリーボードのセグエを使用)、期待どおりに「POP」メッセージがコンソールに投稿されます。

ここに画像の説明を入力

于 2012-04-11T17:23:08.027 に答える