如何检测UIWebView何时开始选择文本

how to detect when UIWebView starts selecting text?

本文关键字:何时 开始 选择 文本 UIWebView 何检测 检测      更新时间:2023-09-26

我有一个UIWebView,它通过控制器显示静态内容并对各种滑动手势做出反应。

文本选择已被禁用,但现在我正在开发一个新功能,允许文本选择并显示自定义上下文菜单。

现在我需要能够检测文本选择何时处于活动状态,以便关闭滑动手势。

我能想到的唯一方法是检查在滑动处理程序方法中是否有使用JS选择的文本。还有其他想法吗?有人知道如何做得更好吗?

谢谢。

当用户选择文本时,菜单ViewController将显示。。您可以通过在viewController 上添加通知来检测

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(menuShown) name:UIMenuControllerDidShowMenuNotification object:nil];

检测菜单隐藏的情况相同。

您可以使用"长按手势识别器"绑定到UIWebView。您可以将其校准为用户在选择文本之前按住文本所需的时间。

我最终使用以下方法禁用和启用了使用Rangy库的手势识别器。效果很好。

- (BOOL) isSelectionActive
{
    NSString * resultStr = [self.contentView stringByEvaluatingJavaScriptFromString:
                            @"rangy.getSelection().isCollapsed"];
    NSLog(@"resultStr: %@", resultStr );
    if ([resultStr isEqualToString:@"true"]) {
        return NO;
    }
    else {
        return YES;
    }
}