【问题标题】:Can't move keyboard view iOS9 swift无法移动键盘视图iOS9 swift
【发布时间】:2015-12-14 10:24:24
【问题描述】:

我需要像 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 上似乎键盘固定到位有点不同,所以我无法移动它。 也许有人遇到同样的问题,可以帮助我。 谢谢。

【问题讨论】:

    标签: ios iphone swift keyboard accessoryview


    【解决方案1】:

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

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

    【讨论】:

    • 感谢这帮助了我。这会干扰应用提交吗?
    • 是的,它会的。这使用私有 API,您的应用可能会被拒绝。
    猜你喜欢
    • 2014-11-22
    • 1970-01-01
    • 2023-03-08
    • 2019-03-30
    • 2013-11-08
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    • 2010-12-19
    相关资源
    最近更新 更多