获取键盘大小而不使用UIKeyboardWillShowNotification

11
我想要获取键盘的大小,但不使用可用的键盘通知。原因是我在视图上有几个文本字段,并且我不需要为所有这些文本字段调整视图大小,就像我在几乎每个示例中看到的那样。我只需要为某些在编辑时将会被覆盖键盘的文本字段/视图调整视图大小。所以我使用textFieldDidBeginEditingtextFieldDidEndEditing方法,因为我知道这里正在编辑哪个文本字段。另一个问题是,即使我订阅了键盘通知,UIKeyboardWillShowNotification也会在textFieldDidBeginEditing之后触发,所以我无法在第一次激活时获取键盘大小。我认为从键盘通知函数中没有提供实际文本字段或视图的信息。
The following code works but I need the keyboard size:

- (void) textFieldDidBeginEditing:(UITextField *) textField {
  if ([theControls containsObject: textField]) {
    [UIView beginAnimations: @"szar" context: nil];
    [UIView setAnimationDuration:0.3];
    self.view.transform = CGAffineTransformTranslate(self.view.transform, 0, -216);
    [UIView commitAnimations];
  }
}

- (void) textFieldDidEndEditing:(UITextField *) textField {
  if ([theControls containsObject: textField]) {
    [UIView beginAnimations: @"szar" context: nil];
    [UIView setAnimationDuration:0.3];
    self.view.transform = CGAffineTransformTranslate(self.view.transform, 0, +216);
    [UIView commitAnimations];
  }
}

可能是获取iOS键盘高度而不显示键盘的重复问题。 - Duncan Babbage
如果有关系的话,@DuncanBabbage:那个问题不是比我的晚三年问的吗?如果没有关系的话:是的,就是那个问题。 - gyozo kudor
1
是的,你的帖子先发布了。标记重复的目的是将qs链接在一起并去重,以帮助用户找到高质量的答案。另一个q有一个简短的解决方案可行。在解决问题后,我在那里写了一个高质量的答案,以帮助未来遇到这个问题的人。之后发现了你的问题,所以标记了它和其他几个问题为重复。标准是最佳答案,而不是第一个发布的答案。在这种情况下,q没有收到任何有效的答案。我在另一个q的答案上进行了补充,所以无论如何我都会在那里发布。这并不会对你产生负面影响! - Duncan Babbage
1个回答

15

我仍然使用了通知,但不是你提到的那些。也许这样会更好?只是想帮忙,我明白这些问题有多令人沮丧。

viewDidLoad {
[[NSNotificationCenter defaultCenter] addObserver:self
                                     selector:@selector(keyboardWasShown:)
                                         name:UIKeyboardDidShowNotification
                                       object:nil];
 //For Later Use
[[NSNotificationCenter defaultCenter] addObserver:self
                                     selector:@selector(keyboardWillHide:)
                                         name:UIKeyboardWillHideNotification
                                       object:nil];
}

- (void)keyboardWasShown:(NSNotification *)notification {
  // Get the size of the keyboard.
  CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
}

编辑:这也可能有所帮助,可以区分活动文本字段与非活动文本字段

- (void)textFieldDidBeginEditing:(UITextField *)textField {
self.activeTextField = textField;
}


- (void)textFieldDidEndEditing:(UITextField *)textField{
self.activeTextField = nil;
}

keyboardWasShown在上面的两个文本字段委托之前被调用。 - kemdo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接