1

ウィンドウ レベルでキーボードのフレームの座標を取得して TableCell と比較し、スクロールを微調整して、セルで選択した TextField がキーボードやヘッダーの後ろにならないようにしようとしています。

ただし、ウィンドウ レベルでキーボードの x、y 座標を取得する際に問題が発生しています。それらは単純に 0,0 (原点) を返しますが、これは正しくありません。または、そうであれば、私が必要としているものではありません。

私は次の行を使用しています:

CGRect keyboardFrame = [self.view.window convertRect:_numericKeyboardView.frame toView:nil];
NSLog(@"Keyboard Frame: %f, %f, %f, %f", keyboardFrame.origin.x, keyboardFrame.origin.y, keyboardFrame.size.width, keyboardFrame.size.height);

出力を生成します(縦向きの場合):

Keyboard Frame: 0.000000, 0.000000, 768.000000, 264.000000

次のようになる必要がある場合:

Keyboard Frame: 415.000000, 0.000000, 768.000000, 264.000000  

正しいキーボード座標を取得する方法についてのアイデアはありますか?

4

3 に答える 3

2

http://developer.apple.com/library/ios/#documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.htmlから

次のようなキーボード通知に登録する必要があります

 [[NSNotificationCenter defaultCenter] addObserver:self
            selector:@selector(keyboardWasShown:)
            name:UIKeyboardDidShowNotification object:nil];

それから

- (void)keyboardWasShown:(NSNotification*)aNotification
{
    NSDictionary* info = [aNotification userInfo];
    CGRect kbFrame = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue];
}

deallocメソッドで自己フォーム通知センターを削除することを忘れないでください

于 2013-03-12T14:38:30.167 に答える
1

このようにしたい場合はconvertRect:toView:、間違った受信者に送信している可能性があります。行う[_numericKeyboardView convertRect:_numericKeyboardView.bounds toView:nil];

于 2013-03-12T14:45:50.387 に答える
0

あなたの質問は誤解を招きます。「キーボード」はカスタムビューであり、システムキーボードではないようです。問題は、「ウィンドウ座標でビューのフレームを取得する」ことです。このconvertRect:toView方法は機能しますが、逆になります。

コードを次のように変更します。

CGRect keyboardFrame = [_numericKeyboardView convertRect:_numericKeyboardView.bounds 
                                                  toView:self.view.window];
于 2013-03-12T14:48:24.273 に答える