0

キーボードが表示されているときにフォームを上に移動しようとします。私のアプローチは、キーボードのフレームとテキスト フィールドのフレームが交差するかどうかをテストすることです。

- (void)keyboardDidShow:(NSNotification *)notification
{


    // Get the size of the keyboard.
    CGRect keyboardFrame = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue];

    //Test whether the current frame of the text field is hidden by the keyboard

    if (!CGRectIsNull(CGRectIntersection(keyboardFrame,self.activeField.frame))) {
        NSLog(@"Key board frame intersects with the text field frame");
    }


}

上記のコードでは、CGRectIsNull常に null を返します。

デバッグ ステートメントは、フォームで選択されているキーボードとアクティブなテキスト フィールドに関する次の情報を返します。

キーボードのサイズ = (幅 = 352、高さ = 1024) キーボードの原点 = (x=-352、y = 0)

キーボード フレーム = (-352,0,352,1024) テキスト フィールド フレーム = (200, 15, 300, 30)

すべてのテキスト フィールドに同じフレーム値が含まれています。これは、何かが間違っていることを意味します。では、フォームを上下に移動するために、キーボードがテキスト フィールドを隠しているかどうかをテストするにはどうすればよいでしょうか。ありがとう。

4

2 に答える 2

0

全部をフルスクリーンのUIScrollViewに入れて、必要に応じてサイズを変更します...

// This in your init somewhere
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChange:) name:UIKeyboardWillChangeFrameNotification object:nil];

-(void) keyboardWillChange:(NSNotification*)notify {

    CGRect endFrame;
    float duration = [[[notify userInfo] valueForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue];
    [[[notify userInfo] valueForKey:UIKeyboardFrameEndUserInfoKey] getValue:&endFrame];
    endFrame = [self.view convertRect:endFrame fromView:nil];
    float y = (endFrame.origin.y > self.view.bounds.size.height ? self.view.bounds.size.height : endFrame.origin.y);

    [UIView animateWithDuration:duration animations:^{
        scrollView.frame = CGRectMake(0, 0, self.view.bounds.size.width, y);
    }];

}
于 2013-02-28T14:55:19.067 に答える
-1

これを試して:

 [[NSNotificationCenter defaultCenter] addObserverForName:UIKeyboardWillShowNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) {}];

そして、からの情報を使用します[note userInfo];

于 2013-02-28T14:58:15.397 に答える