不知道是不是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