我有一个加载WkWebView的应用程序,在WebView中,当在内容中选择文本范围时会触发JavaScript。该脚本在页面上显示HTML控件。
出现IOS菜单(复制/定义/共享)时出现问题。
问题1
选择文本(长按)后,将显示HTML控件。 当您从屏幕上抬起手指时,会显示IOS复制/定义事件,并且HTML控件将消失。使用UI控件调整文本范围可以恢复HTML控件。
所需行为
IOS“菜单”无论它实际上是什么,都没有必要,我不想让它显示出来。我也不希望HTML控件消失,但我不知道IOS正在做些什么来实现它。在HTML页面本身上,单击除操作按钮以外的任何位置将删除选择和HTML控件。如何禁用此行为?
问题2
尝试在选择结束时使用ui控件调整文本选择范围有时会导致选择端点ui控件之前的所有内容。
欲望行为:
不要这样做。如何防止它移动我不接触的选择控件的一侧?
答案 0 :(得分:1)
我遇到同样的问题,这是我的解决方案: 选择菜单显示在UICalloutBar中。我找到UICalloutBar视图并在它显示之前将其删除。
-(void) viewDidAppear:(BOOL)animated{
[super viewWillAppear:animated];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(menuWillShow:) name:UIMenuControllerWillShowMenuNotification object:[UIMenuController sharedMenuController]];
}
-(void) viewWillDisappear:(BOOL)animated{
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIMenuControllerWillShowMenuNotification object:[UIMenuController sharedMenuController]];
[super viewWillDisappear:animated];
}
-(void)findUI:(UIView*) view{
if([@"UICalloutBar" isEqualToString:[[view class] description]]){
//NSLog(@"UIView:%@",[[view class] description]);
[view removeFromSuperview ];
//[view setAlpha:0];
return;
}
for(UIView* subview in view.subviews){
[self findUI: subview];
}
}
-(void)menuWillShow:(NSNotification *)notification
{
NSArray* windows = [[UIApplication sharedApplication] windows];
for(UIWindow* window in windows){
if([@"UITextEffectsWindow" isEqualToString:[[window class] description]]){
[self findUI:window];
}
}
}