iphone - 在没有 KeyboardWillShowNotification 的情况下获取键盘大小

标签 iphone objective-c keyboard

我想在不使用可用的键盘通知的情况下获取键盘的大小。原因是我在 View 上有多个文本字段,我不需要为它们的所有 调整 View 的大小,正如我在几乎每个示例中看到的那样。我只需要调整一些文本字段/ View 的 View 大小,这些文本字段/ View 在编辑时将位于键盘后面。所以我正在使用 textFieldDidBeginEditingtextFieldDidEndEditing 方法,因为在这里我知道正在编辑的文本字段。另一个问题是,即使我订阅了键盘通知,UIKeyboardWillShowNotification 也会在 textFieldDidBeginEditing 之后触发,所以我无法在第一次激活时获得键盘大小。我假设实际文本字段或 View 可用的键盘通知功能未提供任何信息。

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];
  }
}

最佳答案

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

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;
}

关于iphone - 在没有 KeyboardWillShowNotification 的情况下获取键盘大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6910085/

相关文章:

iphone - copyItemAtPath 在模拟器上工作但在设备上失败

iphone - showUserLocation 在 iPhone 模拟器中返回图钉而不是蓝点

ios - 链式过滤导致内存崩溃

iphone - 如何将离线网络应用程序 (HTML+JS+CSS) 与我的服务器同步?

ios - 在子类化 ViewController 中查看

java - 自定义键盘候选 View 导致 Gmail EditText 跳转

iphone - 在一个 View Controller 和 UAModalPanel 之间保留 View

objective-c - 我怎么知道指针是否是 NSObject?

ios - 按下按钮时隐藏键盘

Android 自定义键盘弹出