EditBox软键盘输入问题

不知道是不是editbox建立了一个全局的事件监听。。。。

我看代码确实会在 Editbox 的 父类 IMEDelegate 释放时移除监听, 只有找到 delegate 才会在 keyboardWillHide 中移动屏幕:

IMEDelegate::~IMEDelegate()
{
    IMEDispatcher::sharedDispatcher()->removeDelegate(this);
}
void IMEDispatcher::dispatchKeyboardWillHide(IMEKeyboardNotificationInfo& info)
{
    if (_impl)
    {
        IMEDelegate * delegate = nullptr;
        DelegateIter last = _impl->_delegateList.end();
        for (DelegateIter first = _impl->_delegateList.begin(); first != last; ++first)
        {
            delegate = *(first);
            if (delegate)
            {
                delegate->keyboardWillHide(info);
            }
        }
    }
}

晚上有时间的话, 我看下你的 demo

我的理解:是在view下添加的监听,这个地方的监听应该是当弹出软键盘时显示的view大小会改变。而editbox的监听是当点击输入框内时,弹出软键盘,输入完成关闭软键盘,view大小再次改变。楼主如果理解了这个思路,再去查问题会好查一点吧。

嗯,谢谢。我完全不懂oc

嗯,谢谢啦

assets.zip (63.8 KB)

搞好了, 我试了下删除和隐藏确实都不行, 断点发现 Editbox 的析构函数并没有执行, 不知道是打算复用还是等 gc.

但是我给 editbox 设置了一个屏幕外的位置, 算出来的 offset 是 0, 屏幕就不会移动了, 监听 webview 的 back 再把 editbox 的位置设置回来就好了.

为了通用的话你可以把这个做成一个 Component, 挂在需要隐藏的 editbox 上面, webview 打开和关闭都发送一个事件, 这边监听下事件就行.

私信聊~

MARKMARKMARK

能留下qq吗?我加你

407574060 justbilt