1

2 つのテキスト フィールドがあります。テキスト フィールドをクリックすると (ポートレート モードで)、キーボードは textField を隠しません。しかし、 Landscape に変更すると、キーボードが textFields をオーバーレイします。縦向きと横向きの両方で機能するように、デリゲート メソッド (textFieldShouldBeginEditing、textFieldShouldEndEditing) でフレーム サイズを設定する方法がわかりません。または、スクロールビューを使用する必要がありますか??ここに画像の説明を入力

ここに画像の説明を入力

4

3 に答える 3

3

を使用し、scrollView他の UI 要素を のサブビューとして作成する必要がありScrollViewます。また、 のフレーム サイズscrollViewもウィンドウ全体のサイズを使用するLandscape Mode必要があります (これについては、学習する必要がありますautoresizingmask)。そして、textFieldandを呼び出すときはkeyboard appears、フレームのサイズを縮小しscrollViewて、キーボードが表示されていてもスクロールする必要があります。

以下は、textFieldDidBeginEditing および textFieldDidEndEditing メソッドの私のコードです。

- (void)textFieldDidBeginEditing:(UITextField *)textField
{

    [UIView beginAnimations: nil context: nil];
    [UIView setAnimationBeginsFromCurrentState: YES];
    [UIView setAnimationDuration: 0.2];
    scrollView.frame = CGRectMake(0,0,320,150); 
    [scrollView scrollRectToVisible:textField.frame animated:YES];
    [UIView commitAnimations];

}


- (void)textFieldDidEndEditing:(UITextField *)textField
{

    [self autoCalculateDownPayment];
    [UIView beginAnimations: nil context: nil];
    [UIView setAnimationBeginsFromCurrentState: YES];
    [UIView setAnimationDuration: 0.2];
    scrollView.frame = CGRectMake(0,0,320,416);
    [UIView commitAnimations];
}
于 2012-05-10T15:45:17.540 に答える
1

メソッドの画面の中央にエディットボックス(たとえば)が表示されるように、ViewControllerのフレームを設定する必要があります(void)textFieldDidBeginEditing:(UITextField *)textField。計算は向きに依存する必要があります。そして、フレームをで元のフレームに設定し(void)textFieldDidEndEditing:(UITextField *)textFieldます。

また、scrollviewを使用したり、編集ボックスにタッチしたときにコンテンツオフセットを変更したりするなど、さまざまなアプローチがあります。

于 2012-05-10T15:06:50.467 に答える
1

100% 確実な答えを提供することはできません。これは少し主観的なものであり、アプリを実際に見ることができないためです (印刷画面があると便利です)。しかし、私の意見でUIScrollViewは、良い答えになるでしょう。もう 1 つのオプションはUITextField、キーボードが来ると「上がる」ことができるように、アニメーション化することです。

于 2012-05-10T15:02:58.720 に答える