UITextField和键盘通知

所以我为键盘外观事件设置了一个通知。 现在让我们考虑一个UITextView和一个UITextField。

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyboardWillShow:)
                                             name:UIKeyboardWillShowNotification
                                           object:nil];

选择器是:

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

        keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
}

在一个UITextView,委托方法的情况下- (void)textViewDidBeginEditing:(UITextView *)textView进行烧成的AFTER keyboardWillShow:方法。 所以keyboardSize具有键盘的实际尺寸,我可以在textview委托方法中使用它。

但是在UITextField的情况下,相应的委托方法- (void)textFieldDidBeginEditing:(UITextField *)textFieldkeyboardWillShow:方法之前被触发。

这是为什么? 如何在textfield的情况下获取键盘的CGSize ,因为现在它只返回零,因为textfield委托首先被调用,而不是键盘选择器。


奇怪......听起来像是苹果公司的错误。

也许你可以推迟键盘弹出? 这是我不幸的非常混乱的“解决办法”建议 - 您可以在选择文本字段时发送通知,但实际上只是稍后开始编辑一小段时间,以便在调用keyboardWillShow:之前实际已知文本字段keyboardWillShow: 。 例如:

-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField {

    // Notification corresponding to "textFieldSelected:" method
    [[NSNotificationCenter defaultCenter] postNotificationName:NOTIFICATION_TEXT_FIELD_SELECTED object:nil userInfo:[[NSDictionary alloc] initWithObjectsAndKeys:textField, @"textField", nil]];

    // "textFieldReallyShouldBeginEditing" is initially set as FALSE elsewhere in the code before the text field is manually selected
    if (textFieldReallyShouldBeginEditing)
        return YES;
    else
        return NO:
}

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

    // Done in a separate method so there's a guaranteed delay and "textFieldReallyShouldBeginEditing" isn't set to YES before "textFieldShouldBeginEditing:" returns its boolean. 
    [self performSelector:@selector(startTextFieldReallyEditing:) withObject:(UITextField*)notification[@"textField"] afterDelay:.01];
}

- (void)startTextFieldReallyEditing:(UITextField*)textField {
    textFieldReallyShouldBeginEditing = YES;

    // To trigger the keyboard
    [textField becomeFirstResponder];
}

然后,根据您创建通知的方式,您甚至可以在开始编辑之前插入此已知文本字段的值。


我有这个相同的问题。 尝试使用:

- (BOOL)textViewShouldBeginEditing:(UITextView *)textView              
链接地址: http://www.djcxy.com/p/66729.html

上一篇: UITextField and Keyboard Notifications

下一篇: StatusBar orientation wrong when receiving orientation changed notification