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 に答える