-1

Google 翻訳から:

こんにちは、テキスト フィールドをクリックすると、ピッカー ビューが表示されます。

[完了] ボタンに触れずにテキスト フィールドからテキスト フィールドに移動し、ピッカー ビューを含むテキスト フィールドに移動して [完了] を押すと、スクロール ビューが元のサイズに戻りません。

喜ばせる方法を知っていますか?

オリジナル:

Bonjour, lorsque je clique sur un text field, j'ai fais quelques modified pour qu'un picker view apparaisse.

Quand je navigue de text field en text field sans toucher sur la touche "Terminé" et que je me rend dans un text field qui contient un picker view et que la, j'appuis sur terminé, le scroll view ne reprend pas sa taille initiale .

Savez vous comment faire s'il vous plaît ?

ボイスモンコード:

- (void)viewDidLoad
{
    [super viewDidLoad];
    [ScrollView setContentSize:CGSizeMake(320, 974)];
    [ScrollView setScrollEnabled:YES];

    //on abonne notre instance aux notifications du clavier lorsqu'il apparaît et lorsqu'il disparait
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:)
                                                 name:UIKeyboardWillShowNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:)
                                                 name:UIKeyboardWillHideNotification object:nil];
}

- (void)keyboardWillShow:(NSNotification *)aNotification {
    //si le clavier est déjà présent on ne fait rien
    if (keyboardIsShown) {
        return;
    }

    if (nom.editing == YES)
    {
        //on récupère la taille du clavier
        NSDictionary* info = [aNotification userInfo];
        CGRect _keyboardEndFrame;
        [[info valueForKey:UIKeyboardFrameEndUserInfoKey] getValue:&_keyboardEndFrame];
        CGSize keyboardSize = _keyboardEndFrame.size;

        //on crée une nouvelle frame pour la scrollView
        CGRect viewFrame = self.ScrollView.frame;
        viewFrame.size.height -= keyboardSize.height;

        //on redimensionne la scrollView dans une animation
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationBeginsFromCurrentState:YES];
        [UIView setAnimationDuration:0.3];
        [self.ScrollView setFrame:viewFrame];
        [UIView commitAnimations];

        //on scroll jusqu'au champs texte en cours d'édition
        CGRect textFieldRect = nom.frame;
        [self.ScrollView scrollRectToVisible:textFieldRect animated:YES];

        //on enregistre l'état actuel du clavier
        keyboardIsShown = YES;
    }

    else if (dateVol.editing == YES)
    {
        //on récupère la taille du clavier
        NSDictionary* info = [aNotification userInfo];
        CGRect _keyboardEndFrame;
        [[info valueForKey:UIKeyboardFrameEndUserInfoKey] getValue:&_keyboardEndFrame];
        CGSize keyboardSize = _keyboardEndFrame.size;

        //on crée une nouvelle frame pour la scrollView
        CGRect viewFrame = self.ScrollView.frame;
        viewFrame.size.height -= keyboardSize.height;

        //on redimensionne la scrollView dans une animation
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationBeginsFromCurrentState:YES];
        [UIView setAnimationDuration:0.3];
        [self.ScrollView setFrame:viewFrame];
        [UIView commitAnimations];

        //on scroll jusqu'au champs texte en cours d'édition
        CGRect textFieldRect = prenom.frame;
        [self.ScrollView scrollRectToVisible:textFieldRect animated:YES];

        //on enregistre l'état actuel du clavier
        keyboardIsShown = YES;
    }
 }

//méthode appelée lorsque le clavier disparaît (on quitte l'édition d'un champs texte)
- (void)keyboardWillHide:(NSNotification *)aNotification {

    if (nom.editing == YES || dateVol.editing == YES)
    {
        //get the size of the keyboard
        NSDictionary* info = [aNotification userInfo];
        CGRect _keyboardEndFrame;
        [[info valueForKey:UIKeyboardFrameEndUserInfoKey] getValue:&_keyboardEndFrame];
        CGSize keyboardSize = _keyboardEndFrame.size;

        //resize the scroll view
        CGRect viewFrame = self.ScrollView.frame;
        viewFrame.size.height += keyboardSize.height;

        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationBeginsFromCurrentState:YES];
        [UIView setAnimationDuration:0.3];
        [self.ScrollView setFrame:viewFrame];
        [UIView commitAnimations];

        keyboardIsShown = NO;
    }
}
4

1 に答える 1

0

inputViewUITextField の を UIPickerView に設定し、UIPickerView を使用した後に [完了] をクリックすると、スクロールビューが以前の場所に戻らないと言っていると思います。あなたのコードを見ると、これは、システムによって a が送信されたkeyboardWillHideときにのみメソッドが呼び出されるためだと思います。完了ボタンを押しUIKeyboardWillHideNotificationたときに、システムが を送信していないと思います。UIKeyboardWillHideNotificationメソッドを呼び出す [完了] ボタンを押したときに呼び出されるメソッドにコードを追加する必要がありますkeyboardWillHide

于 2013-07-20T21:36:45.700 に答える