Скрыть клавиатуру при переключении на другой вид - PullRequest
0 голосов
/ 26 мая 2011

У меня есть некоторое UITextField на представлении, которое вызовет клавиатуру, когда она нажата.Там есть кнопка, которая будет переходить в другой вид тоже.Существует проблема, когда я перехожу из этого представления во второе представление с активной клавиатурой.Когда я вернусь из второго вида, клавиатура появится сама по себе.Как мне это предотвратить?

   -(IBAction) loginButton:(id) sender
    {
        [currentTextField resignFirstResponder];
        RequestPage *RequestPageview = [[RequestPage alloc] initWithNibName:nil bundle:nil];


        [UIView beginAnimations:@"flipping view" context:nil];
        [UIView setAnimationDuration:1];
        [UIView setAnimationCurve:UIViewAnimationCurveLinear];
        [UIView setAnimationTransition:UIViewAnimationTransitionCurlUp
                               forView:self.view.superview
                                 cache:YES];

        [UIView commitAnimations];
        [self presentModalViewController:RequestPageview animated:YES];
        //ß[self.view addSubview:RequestPageview.view];
    }
//---when the keyboard appears---
-(void) keyboardDidShow:(NSNotification *) notification {
    if (keyboardIsShown) return;

    NSDictionary* info = [notification userInfo];

    //---obtain the size of the keyboard---
    NSValue *aValue =
    [info objectForKey:UIKeyboardFrameEndUserInfoKey];
    CGRect keyboardRect =
    [self.view convertRect:[aValue CGRectValue] fromView:nil];


    //---resize the scroll view (with keyboard)---
    CGRect viewFrame = [scrollview frame];
    NSLog(@"%f", viewFrame.size.height);
    viewFrame.size.height -= keyboardRect.size.height;
    scrollview.frame = viewFrame;
    NSLog(@"%f", keyboardRect.size.height);
    NSLog(@"%f", viewFrame.size.height);
    //---scroll to the current text field---
    CGRect textFieldRect = [currentTextField frame];
    [scrollview scrollRectToVisible:textFieldRect animated:YES];
    keyboardIsShown = YES;
        NSLog(@"Login Keyboard appear");
}

//---when the keyboard disappears---
-(void) keyboardDidHide:(NSNotification *) notification {
    NSDictionary* info = [notification userInfo];

    //---obtain the size of the keyboard---
    NSValue* aValue =
    [info objectForKey:UIKeyboardFrameEndUserInfoKey];
    CGRect keyboardRect =
    [self.view convertRect:[aValue CGRectValue] fromView:nil];


    //---resize the scroll view back to the original size
    // (without keyboard)---
    CGRect viewFrame = [scrollview frame];
    viewFrame.size.height += keyboardRect.size.height;
    scrollview.frame = viewFrame;

    keyboardIsShown = NO;
        NSLog(@"Login Keyboard disappear");
}


2011-05-27 16:57:20.628 LoginPage[322:207] Login view appear // loaded the app
2011-05-27 16:57:32.220 LoginPage[322:207] Login Keyboard appear // tap on textfield
2011-05-27 16:57:35.665 LoginPage[322:207] Request view appeared // navigate to second view with keyboard shown
2011-05-27 16:57:35.667 LoginPage[322:207] Login view disappear
2011-05-27 16:57:35.978 LoginPage[322:207] Request Keyboard disappear // weird? I should have hide the Login Keyboard instead
2011-05-27 16:57:39.738 LoginPage[322:207] Login view appear // navigate back
2011-05-27 16:57:39.740 LoginPage[322:207] Request view disappeared 

Ответы [ 2 ]

1 голос
/ 21 декабря 2012

Если вы хотите скрыть клавиатуру при нажатии кнопки и если у вас более одного текстового поля, вы можете использовать этот код ...

[self.view endEditing:YES];

Нажмите в любом месте, и клавиатура исчезнет ...

Наслаждайтесь !! ...

0 голосов
/ 26 мая 2011

В методе loginButton вызовите resignFirstResponder в редактируемом текстовом поле.Когда пользователь возвращается к этому контроллеру представления, клавиатура больше не будет присутствовать.Вам нужно будет немного изменить свой код, чтобы у вас была ссылка на текстовое поле.Если есть только одно текстовое поле, IBOutlet будет делать.Для нескольких полей сделайте ваш контроллер представления делегатом, и вы сможете сохранить ссылку на текущее текстовое поле, когда пользователь начнет редактирование.Вы также можете просмотреть подпредставления своего представления, хотя это потенциально не так эффективно.

...