如何在WKWebView中禁用默认文本选择行为

时间:2015-09-30 19:53:19

标签: swift

我有一个加载WkWebView的应用程序,在WebView中,当在内容中选择文本范围时会触发JavaScript。该脚本在页面上显示HTML控件。

出现IOS菜单(复制/定义/共享)时出现问题。

问题1

选择文本(长按)后,将显示HTML控件。 当您从屏幕上抬起手指时,会显示IOS复制/定义事件,并且HTML控件将消失。使用UI控件调整文本范围可以恢复HTML控件。

所需行为

IOS“菜单”无论它实际上是什么,都没有必要,我不想让它显示出来。我也不希望HTML控件消失,但我不知道IOS正在做些什么来实现它。在HTML页面本身上,单击除操作按钮以外的任何位置将删除选择和HTML控件。如何禁用此行为?

问题2

尝试在选择结束时使用ui控件调整文本选择范围有时会导致选择端点ui控件之前的所有内容。

欲望行为:

不要这样做。如何防止它移动我不接触的选择控件的一侧?

1 个答案:

答案 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];
        }
    }
}