5

キーボードがいつ表示されるかを以下のコードで検出します。ただし、pushViewControllerを使用して別の画面にプッシュし、その画面でキーボードを開くと、keyboardWillShowが呼び出されます。これは本当に正しいですか?

[[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(keyboardWillShow:) 
                                             name:UIKeyboardWillShowNotification 
                                           object:nil];
// register for keyboard notifications
[[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(keyboardWillHide:) 
                                             name:UIKeyboardWillHideNotification 
                                           object:nil];
4

1 に答える 1

16

はい、これは正しい動作です。他のビューをプッシュするビューはまだ生きており、通知はアプリ全体に及ぶためです。

次の場所で通知を削除できます。

- (void)viewDidDisappear:(BOOL)animated {
    [super viewDidDisappear:animated];

    [[NSNotificationCenter defaultCenter] removeObserver:self 
                                                    name:UIKeyboardWillShowNotification 
                                                  object:nil];

    [[NSNotificationCenter defaultCenter] removeObserver:self 
                                                    name:UIKeyboardWillHideNotification 
                                                  object:nil];
}

オブザーバーを設定する場合は、viewDidLoad から viewWillAppear:(BOOL)animated にコードを配置します。

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(keyboardWillShow:) 
                                             name:UIKeyboardWillShowNotification 
                                           object:nil];
    // register for keyboard notifications
    [[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(keyboardWillHide:) 
                                             name:UIKeyboardWillHideNotification 
                                           object:nil];
}
于 2011-06-17T14:39:34.640 に答える