【问题标题】:Get keyboard size without UIKeyboardWillShowNotification在没有 KeyboardWillShowNotification 的情况下获取键盘大小
【发布时间】:2011-10-18 02:44:01
【问题描述】:

我想在不使用可用键盘通知的情况下获取键盘的大小。原因是我在视图上有几个文本字段,我不需要为 all 调整视图的大小,正如我在几乎每个示例中看到的那样。我只需要为编辑时将在键盘后面的一些文本字段/视图调整视图的大小。所以我使用textFieldDidBeginEditing 和 textFieldDidEndEditing 方法,因为在这里我知道正在编辑什么文本字段。另一个问题是,即使我订阅了键盘通知,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];
  }
}

【问题讨论】:

  • @DuncanBabbage 以防万一:这个问题不是比我晚了 3 年吗?如果它没有:是的,它是
  • 是的,首先发布的是您的。标记重复的目的是将 qs & deduplicate 链接在一起,以帮助用户找到高质量的答案。另一个 q 有一个有效的简短解决方案。在解决了这个问题后,我在那里写了一个高质量的答案,以帮助未来的人面临这个问题。之后发现你的问题,所以将它和其他几个标记为重复。标准是引导人们的最佳答案,而不是首先发布。在这种情况下, q 没有收到任何有效的答案。我建立在对另一个 q 的回答的基础上,所以无论如何我都会在那里发布。不会对您产生负面影响!

标签: iphone objective-c keyboard


【解决方案1】:

我仍然使用通知,但不是您指定的通知。也许这会更好?只是想帮忙,我明白这些事情是多么令人沮丧。

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 在 2 以上文本字段委托之前调用
猜你喜欢
  • 1970-01-01
  • 2013-03-13
  • 2011-06-04
  • 1970-01-01
  • 2011-01-14
  • 2011-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多