【问题标题】:Hide keyboard when switching to another view切换到另一个视图时隐藏键盘
【发布时间】:2011-09-02 17:49:53
【问题描述】:

我在视图上有一些 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 

【问题讨论】:

    标签: xcode view keyboard hide switching


    【解决方案1】:

    如果您想在点击按钮时隐藏键盘,并且如果您有多个文本字段,那么您可以使用此代码...

    [self.view endEditing:YES];
    

    点击视图中的任何位置,键盘就会消失...

    享受!!...

    【讨论】:

      【解决方案2】:

      在 loginButton 方法中,在正在编辑的文本字段上调用 ​​resignFirstResponder。当用户导航回该视图控制器时,键盘将不再存在。您需要稍微更改您的代码,以便您可以参考文本字段。如果只有一个文本字段,IBOutlet 就可以了。对于多个字段,使您的视图控制器成为委托,并且您可以在用户开始编辑时保留对当前文本字段的引用。您也可以遍历视图的子视图,尽管这可能效率不高。

      【讨论】:

      • @March Charbonneau 感谢您的回复。当它改变视图但有一些奇怪的行为时,我设法让键盘隐藏起来。我在两个页面上都有 keyboardDidHide 和 keyboardDidShow 方法,用于根据键盘的状态执行一些操作。似乎当键盘在第一个视图上处于活动状态时,然后如果我导航到第二个视图,它会在第二个视图而不是第一个视图上调用 KeyboardDidHide 方法。同样,当键盘显示在第二个视图上并将其导航回视图 1 时,将调用第一个视图的 keyboardDidHide 而不是第二个。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-19
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多