我正在设置 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 属性,因此显示不正确。

之后,一切都很好,因为键盘属性已经设置,并且值没有更改。

在首次执行 textFieldDidBeginEditing 之前,如何获取键盘信息?

编辑:

确实找到了解决方案的某种方法,并且它确实起作用了,但对我来说却有点不足,我仍然想知道是否有一种获取键盘信息的方法。
- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [self.txtField becomeFirstResponder];
}

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

在显示和隐藏键盘时,确实在屏幕的最下方给出了简短的闪烁,这是我不喜欢的,但是对于不知道要寻找它的人来说,它可能不是很明显或不明显。

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

另外,不能将放置为 viewDidLoad 中的FirstResponder ,因为在这种情况下也不会调用 keyboardWillShow

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

最佳答案

一种执行此操作的方法是,可以在文本字段中检查isFirstResponder属性,然后遍历文本字段的框架,然后移动其作为第一响应者的框架,而不是在开始编辑时设置文本字段的框架。您可以在获取键盘框架的方法中进行所有操作。

关于ios - 在iOS中,如何获取键盘信息以防止键盘覆盖文本字段?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18143457/

10-14 21:41
查看更多