1

我正在设置一个NOTIFICATION以获取KEYBOARD信息以调整视图,以便所选文本字段不被KEYBOARD覆盖。

@property CGSize keyboard;

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWillShow:)
                                                 name:@"UIKeyboardWillShowNotification"
                                               object:nil];
    ...
}

- (void) keyboardWillShow:(NSNotification *)note
{
    NSDictionary *userInfo = [note userInfo];
    self.keyboard = [[userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
}

我已经设置了UITextFieldDelegate,所以我可以使用KEYBOARD信息

- (void)textFieldDidBeginEditing:(UITextField *)textField

一切都很完美......

除了第一次。

设置KEYBOARD属性的NOTIFICATION在textFieldDidBeginEditing之后调用,因此第一次没有设置KEYBOARD属性,因此它显示不正确。

之后一切都很好,因为KEYBOARD属性已经设置并且值不会改变。

如何在第一次执行textFieldDidBeginEditing之前获取KEYBOARD信息?

编辑

确实找到了一些解决方案,它似乎确实有效,但对我来说感觉有点骇人听闻,我仍然想知道是否有办法获取键盘信息。

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [self.txtField becomeFirstResponder];
}

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    [self.txtField resignFirstResponder];
}

当它显示和隐藏键盘时,它会在屏幕的最底部短暂闪烁,这是我不喜欢的,但对于不知道寻找它的人来说,它可能不是很明显或不明显。

我必须将becomeFirstResponderresignFirstResponder分解为不同的方法,因为如果从同一个方法调用它们,则不会调用keyboardWillShow 。

此外,不能将becomeFirstResponder放在viewDidLoad中,因为在这种情况下也不会调用keyboardWillShow 。

如果有人有改进或更好的方法,我很想听听。

4

1 回答 1

1

您可以这样做的一种方法是,您可以遍历文本字段检查isFirstResponder属性,并移动第一响应者的框架,而不是在开始编辑时设置文本字段的框架。您可以在获得键盘框架的方法中完成所有这些操作。

于 2013-08-09T21:29:10.133 回答