ios – UIWebView Bug: – [UIWebView cut:]:无法识别的选择器发送到实例

编程之家收集整理的这篇文章主要介绍了ios – UIWebView Bug: – [UIWebView cut:]:无法识别的选择器发送到实例编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

在UIWebView中,如果包含文本的输入元素具有焦点,并且按下一个导致输入失焦的按钮,则随后双击输入以重新获得焦点,然后从弹出式栏中选择“剪切(或复制或粘贴)”这样会导致UIWebView崩溃与错误: -[UIWebView cut:]: unrecognized selector sent to instance 0x10900ca60 演示项目:https://github.com/guar
在UIWebVIEw中,如果包含文本的输入元素具有焦点,并且按下一个导致输入失焦的按钮,则随后双击输入以重新获得焦点,然后从弹出式栏中选择“剪切(或复制或粘贴)”这样会导致UIWebVIEw崩溃与错误
-[UIWebVIEw cut:]: unrecognized selector sent to instance 0x10900ca60

演示项目:https://github.com/guarani/WebViewDoubleTapTestTests.git

我觉得这一定是UIWebVIEw的BUG,有什么想法吗?

为了完整,这里是我的网页视图的内容,

<HTML>
    <head>
    </head>
    <body>
        <br><br>
        <input type="text">
        <input type="button">
    </body>
</HTML>

在Apple提交了一个错误报告:15894403

更新2014/10/15:BUG仍然存在于iOS 8.0.2(12A405)

解决方法

这是一个苹果BUG.问题是剪切:操作在响应者链中发送不正确,最终被发送到UIWebVIEw实例,而不是实现该方法的内部UIWebdocumentVIEw.

直到Apple修复了这个BUG,让我们来看看Objective C的运行时间.

在这里,我将UIWebVIEw子类化,以支持所有的UIResponderStandardEditactions方法,将它们转发到正确的内部实例.

@import ObjectiveC;    

@interface CutcopyPasteFixeDWebVIEw : UIWebVIEw @end

@implementation CutcopyPasteFixeDWebVIEw

- (UIVIEw*)_internalVIEw
{
    UIVIEw* internalVIEw = objc_getAssociatedobject(self,"__internal_vIEw_key");

    if(internalVIEw == nil && self.subvIEws.count > 0)
    {
        for (UIVIEw* vIEw in self.scrollVIEw.subvIEws) {
            if([vIEw.class.description hasPrefix:@"UIWeb"])
            {
                internalVIEw = vIEw;

                objc_setAssociatedobject(self,"__internal_vIEw_key",vIEw,OBJC_ASSOCIATION_ASSIGN);

                break;
            }
        }
    }

    return internalVIEw;
}

voID webVIEw_implement_UIResponderStandardEditactions(ID self,SEL selector,ID param)
{
    voID (*method)(ID,SEL,ID) = (voID(*)(ID,ID))[[self _internalVIEw] methodForSelector:selector];

    //Call internal implementation.
    method([self _internalVIEw],selector,param);
}

- (voID)_prepareForNoCrashes
{
    NSArray* selectors = @[@"cut:",@"copy:",@"paste:",@"select:",@"selectAll:",@"delete:",@"makeTextWritingDirectionleftToRight:",@"makeTextWritingDirectionRightToleft:",@"toggleBoldface:",@"toggleItalics:",@"toggleUnderline:",@"increaseSize:",@"decreaseSize:"];

    for (Nsstring* selname in selectors)
    {
        SEL selector = NSSelectorFromString(selname);

        //This is safe,the method will fail if there is already an implementation.
        class_addMethod(self.class,(IMP)webVIEw_implement_UIResponderStandardEditactions,"");
    }
}

- (voID)awakeFromNib
{
    [self _prepareForNoCrashes];

    [super awakeFromNib];
}

@end

在你的故事板中使用这个子类.

玩的开心.

总结

以上是编程之家为你收集整理的ios – UIWebView Bug: – [UIWebView cut:]:无法识别的选择器发送到实例全部内容,希望文章能够帮你解决ios – UIWebView Bug: – [UIWebView cut:]:无法识别的选择器发送到实例所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

iOS文章

倒排索引0 引言&nbsp;&nbsp;&nbsp;&nbsp;今天介绍一下倒排索引,倒排索引又叫反向索引(inverted index),既然有反向索引那就有正向索引(forward index)了。一些相关概念可以看前文信息检索(Information Retrieval)相关概念1 正向索引和反向索引先介绍一下正向索引: 当用户发起查询时(假设查询为一个关键词),搜索引擎会扫描索引库中的所有文档,找出所有包含关键词的文档,这样依次从文档中去查找是否含有关键词的方法叫做正向索引。互联网上存在的
axios 大家都非常的清楚,一个既可以用于客户端或者 服务端发送http请求的库。但是在前后端联调的时候有的时候会很难受,所以这里我来做一个总结。希望能帮助到有缘人。参数的传递方式参数传递一般有两种,一种是 使用 params, 另一种是 data的方式,有很多的时候我们看到的前端代码是这样的。params 是get请求会把参数放到url 中data 是post请求会把参数添加到请求体(body)中,如何获取请求体中的数据我后面有写到get 请求axios({ method: .
为了处理文件,首先,导入 fstream 库。 在这个库里面有三种数据类型:ofstream - 用于写入文件ifstream - 用于从文件中读取fstream - 用于读取和写入为了打开文件,我们使用 open() 函数。 该函数接收两个参数:文件名和文件打开方式。可以打开文件的模式如下:ios::in - 打开要读取的文件(ifstream 的默认值)ios::out - 打开要写入的文件(ofstream 的默认值)ios::binary - 以二进制模式打开文件ios::a
打开ios镜像方式1、打开vmware workstation,新建虚拟机2、进入新建虚拟机向导,直接选择“典型(推荐)”即可进行下一步3、选择“稍后安装操作系统”后点击下一步4、根据自己的需求选择操作系统及相应的版本(这里已linux系统,Ubuntu版本为例)5、没有特殊需求,接下来几步直接点击下一步即可...
一、前言我们制作多指触碰主要用到Unity中已经封装好的Touch类来制作,首先来看看unity官方对于Touch的描述:地址在移动设备上,Input类提供对触摸屏、加速度计和地理/位置输入的访问。通过iOS 键盘可以访问移动设备上的键盘。iPhone、iPad 和 iPod Touch 设备最多可跟踪五根手指同时触摸屏幕。可通过访问Input.touches属性数组来获取在最后一帧期间触摸屏幕的每根手指的状态。Android 设备对其跟踪的手指数量没有统一限制。相反,此限制因....
基于grasscutter的某国产二次元手游服务器搭建,windows/ios/Android端连接简易教程,已全部验证。
6 月 2 日,历史上的今天,中国电信以总价 1100 亿元人民币收购中国联通 CDMA 网络;苹果在 WWDC 上发布了新的编程语言 Swift;苹果推出了代号为 Yosemite 的 macOS X 10.10。
微信公众号搜索 “ 程序精选 ” ,选择关注!
微信公众号搜 "程序精选"关注