iOS:ビューが消えるたびに、キーボードイベントからナビゲーションコントローラーの登録を解除する必要がありますか?

MichiZH

埋め込みテーブルビューに取り組んでいます。キーボードが一部のテキストフィールドを非表示にすると、上にスクロールする必要があります。しかし、この動作を備えたナビゲーションビューコントローラーには、いくつかのビューコントローラーがあります。これまでのところ、私のコード登録および登録解除コードは次のとおりです。

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self registerForKeyboardNotifications];
}

// Call this method somewhere in your view controller setup code.
- (void)registerForKeyboardNotifications
{
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWasShown:)
                                                 name:UIKeyboardDidShowNotification object:nil];

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWillBeHidden:)
                                                 name:UIKeyboardWillHideNotification object:nil];

}

- (void)dealloc
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

しかし、ナビゲーションコントローラーのビューコントローラー番号3でキーボードを表示している場合、keyboardWasShownメソッドが3回呼び出されます。これは問題ではありませんか、それともviewWillDisappearが表示されるたびに登録を解除する必要がありますか?

書き込み

に移動[self registerForKeyboardNotifications];viewDidAppearて登録を解除する必要ありviewDidDisappearます。

特にナビゲーションコントローラー内でviewDidLoad登録および登録解除することによりdealloc、通知はナビゲーションスタック上のすべてのビューコントローラーに対して1回発生します。現在表示されているビューに対してのみ呼び出す必要があります。

または、ナビゲーションコントローラーをサブクラス化して、現在表示されているコントローラーのメソッドを呼び出すこともできます。そうすれば、このすべての登録と登録解除を行う必要はありません。navコントローラーサブクラスに1回登録するだけで、そのクラスにメッセージを適切なViewControllerに渡すことができます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ