4

我需要实现一个不屑一顾的键盘(向下滑动以消除),就像 iOS 上的股票消息应用程序中的键盘一样。

我有这段代码来获取键盘视图:

func keyboardWillShowWithNotification(notification:NSNotification) {
    let keyboardView = accessoryView.superview
}  

我连接了 tableView 的 UIPanGestureRecognizer 来检测何时需要开始向下移动键盘。

func handleTableViewPan(gr:UIPanGestureRecognizer) {

   let location = panGestureRecognizer.locationInView(self.view)
   let offset = ... //calculated correctly
   keyboardView.frame.origin.y = originalKeyboardFrame.origin.y + offset
}

该方法在 iOS 8 上运行良好,但在 iOS 9 上,键盘的位置似乎有点不同,所以我无法移动它。也许有人遇到同样的问题,可以帮助我。谢谢你。

4

1 回答 1

6

在 iOS 9 中,有一个名为 UIRemoteKeyboardWindow 的新键盘窗口,所以当你使用 accessoryView.superview 时,你会得到一个错误的视图。

要获得正确的视图,请尝试直接从窗口层次结构中找到它:(objective-c 代码)

-(UIView*)getKeyboardInputView {
    if([[UIDevice currentDevice].systemVersion floatValue] >= 9.0) {
        for(UIWindow* window in [[UIApplication sharedApplication] windows])
            if([window isKindOfClass:NSClassFromString(@"UIRemoteKeyboardWindow")])
                for(UIView* subView in window.subviews)
                    if([subView isKindOfClass:NSClassFromString(@"UIInputSetHostView")])
                        for(UIView* subsubView in subView.subviews)
                            if([subsubView isKindOfClass:NSClassFromString(@"UIInputSetHostView")])
                                return subsubView;
    } else {
        return accessoryView.superview;
    }
    return nil;
}

PS取自DAKeyboardControl https://github.com/danielamitay/DAKeyboardControl/pull/98

于 2015-09-28T11:13:48.260 回答