大家可能都知道键盘上新的快速类型栏。
在我的应用程序中,我在键盘上放了一个自定义TextView栏。但是由于 QuickType Bar ,我的textview被隐藏了。
我想知道,是否有任何属性或方法可以知道QuickType Bar是否已打开?
答案 0 :(得分:4)
没有什么可以告诉您QuickType栏是否处于活动状态,但您可以使用此代码注册UIKeyboardWillChangeFrameNotification
通知,然后您可以获得有关键盘高度的信息。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrame:) name:UIKeyboardDidChangeFrameNotification object:nil];
使用传递的UIKeyboardFrameBeginUserInfoKey
字典中的UIKeyboardFrameEndUserInfoKey
和userInfo
值来检索键盘的当前和未来帧。您可以使用以下代码作为参考。
- (void)keyboardWillChangeFrame:(NSNotification*)notification
{
NSDictionary* keyboardInfo = [notification userInfo];
NSValue* keyboardFrameBegin = [keyboardInfo valueForKey:UIKeyboardFrameBeginUserInfoKey];
CGRect keyboardFrameBeginRect = [keyboardFrameBegin CGRectValue];
// Manage your other frame changes
}
希望这会有所帮助。每次键盘改变帧时都会调用它。
答案 1 :(得分:2)
- (void)keyboardFrameChanged:(NSNotification*)aNotification
{
NSDictionary* info = [aNotification userInfo];
CGPoint from = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].origin;
CGPoint to = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].origin;
float height = 0.0f;
if (UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation)) {
height = to.x - from.x;
} else {
height = to.y - from.y;
}
[self setContentSize:CGSizeMake(self.frame.size.width, self.frame.size.height + height)];
}
答案 2 :(得分:2)
正如其他答案所暗示的那样,每次键盘获得新帧时,UIKeyboardWillChangeFrameNotification
都会触发。这包括键盘何时显示和隐藏,以及何时显示和隐藏QuickType栏。
问题是,这与UIKeyboardWillShowNotification
完全相同,只是名称不同。 因此,如果您已经为UIKeyboardWillShowNotification
实施了一种方法,那么您就可以了。
但有一个例外。当您在处理UIKeyboardWillShowNotification
的方法中获得键盘框架时,您必须确保通过UIKeyboardFrameEndUserInfoKey
访问它,而不是UIKeyboardFrameBeginUserInfoKey
。否则,它将在显示/隐藏键盘时获得正确的帧,但在QuickType栏为时不会。
因此,处理UIKeyboardWillShowNotification
的方法中的代码看起来应该是这样的(在Swift中):
func keyboardWillShow(notification: NSNotification) {
let info = notification.userInfo!
keyboardRect = (info[UIKeyboardFrameEndUserInfoKey] as! NSValue).CGRectValue()
keyboardRect = yourView.convertRect(keyboardRect, fromView: nil)
// Handling the keyboard rect by changing frames, content offsets, constraints, or whatever
}