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