iOS 7 UIWebView 键盘问题

2024-02-16

我必须像这里一样删除这个栏link https://stackoverflow.com/questions/13101642/ios-keyboard-style-in-webview但对于 iOS 7,此代码不起作用。


我们通过一些 Objective C 运行时技巧来删除这个栏。

我们有一个类,它有一个方法:

@interface _SwizzleHelper : NSObject @end

@implementation _SwizzleHelper

    -(id)inputAccessoryView
    {
        return nil;
    }

@end

一旦我们有了一个想要从中删除栏的 Web 视图,我们就迭代其滚动视图的子视图并获取UIWebDocumentView班级。然后,我们动态地将上面创建的类的超类设为子视图的类(UIWebDocumentView - 但我们不能预先这么说,因为这是私有 API),并将子视图的类替换为我们的类。

#import "objc/runtime.h"    

-(void)__removeInputAccessoryView
{
    UIView* subview;

    for (UIView* view in self.scrollView.subviews) {
        if([[view.class description] hasPrefix:@"UIWeb"])
            subview = view;
    }

    if(subview == nil) return;

    NSString* name = [NSString stringWithFormat:@"%@_SwizzleHelper", subview.class.superclass];
    Class newClass = NSClassFromString(name);

    if(newClass == nil)
    {
        newClass = objc_allocateClassPair(subview.class, [name cStringUsingEncoding:NSASCIIStringEncoding], 0);
        if(!newClass) return;

        Method method = class_getInstanceMethod([_SwizzleHelper class], @selector(inputAccessoryView));
        class_addMethod(newClass, @selector(inputAccessoryView), method_getImplementation(method), method_getTypeEncoding(method));

        objc_registerClassPair(newClass);
    }

    object_setClass(subview, newClass);
}

与 Swift 3.0 中的上述内容等效:

import UIKit
import ObjectiveC

var swizzledClassMapping = [AnyClass]()

extension UIWebView {
    func noInputAccessoryView() -> UIView? {
        return nil
    }

    public func removeInputAccessoryView() {
        var subview: AnyObject?

        for (_, view) in scrollView.subviews.enumerated() {
            if NSStringFromClass(type(of: view)).hasPrefix("UIWeb") {
                subview = view
            }
        }

        guard subview != nil else {
            return
        }

        //Guard in case this method is called twice on the same webview.
        guard !(swizzledClassMapping as NSArray).contains(type(of: subview!)) else {
            return;
        }

        let className = "\type(of: subview!)_SwizzleHelper"
        var newClass : AnyClass? = NSClassFromString(className)

        if newClass == nil {
            newClass = objc_allocateClassPair(type(of: subview!), className, 0)

            guard newClass != nil else {
                return;
            }

            let method = class_getInstanceMethod(type(of: self), #selector(UIWebView.noInputAccessoryView))
            class_addMethod(newClass!, #selector(getter: UIResponder.inputAccessoryView), method_getImplementation(method), method_getTypeEncoding(method))

            objc_registerClassPair(newClass!)

            swizzledClassMapping += [newClass!]
        }

        object_setClass(subview!, newClass!)
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS 7 UIWebView 键盘问题 的相关文章

  • NSCFData isRessized 崩溃?

    我目前在控制台中收到此崩溃日志 2011 08 23 19 18 40 064 App 1697 707 NSCFData isResizable unrecognized selector sent to instance 0x11f1c
  • mgwt - 以编程方式改变方向

    是否可以在 gwt mgwt 应用程序中更改强制执行特定的屏幕方向 可以说我希望用户始终以横向模式使用应用程序 这取决于 是作为phonegap应用程序 而不是在浏览器内部 如果您作为 Web 应用程序运行 则不需要t get any co
  • 无法从 iOS 中的框架访问 .nib(XIB) 文件

    我已经从现有的代码库中创建了一个框架 并尝试在新的代码库中使用它 这很好用 但是当我尝试访问属于我的框架包的一部分的 nib 文件时 我的应用程序崩溃了 这是我用来访问视图控制器 XIB 文件的代码 testViewController c
  • iOS Safari Mobile 禁用上一个和下一个选择输入

    上周五我发现了关于此问题的类似问题 但似乎无法再次找到它 如果有人能指出我正确的方向 那就太好了 本质上我在一个页面上有多个选择菜单 第一个在加载时填充 第二个在第一个选择时填充 够简单的 但是 在 iOS 设备中 当您点击选择元素时 它会
  • 如何在 Swift 中将文件名与文件扩展名分开?

    给定包中文件的名称 我想将该文件加载到我的 Swift 应用程序中 所以我需要使用这个方法 let soundURL NSBundle mainBundle URLForResource fname withExtension ext 无论
  • 如何找到键盘未覆盖的视图部分(UIModalPresenationStyleFormSheet)?

    我有一个视图控制器 显示带有 UITextView 的视图 并且我想在键盘出现时调整视图的大小 以便 UITextView 不会被键盘覆盖 我几乎在所有情况下都可以正常工作 据我所知 仅当视图控制器以 ModalPresentationSt
  • UITableView Separator 出现在 Cell 视图的中间

    我正在使用默认的 iOS 7 的 TableView Separator 我有不同高度的自定义单元格 当频繁地上下滚动时 一些较小的单元格会留下分隔符 也许不确定这是否是原因 因此 大多数情况下 较大的电池会被分离器从中间切割 我尝试将单元
  • Swift SpriteKit edgeLoopF​​romRect 问题

    下面的代码可以识别底部和顶部边缘场景和球按预期弹开 但是 那左边缘和右边缘现场的情况一直被破坏 如果施加足够的力 球会离开屏幕 然后最终返回 就好像场景的边缘超出了 iPhone 模拟器窗口的边缘 import SpriteKit clas
  • React-native-vision-camera无法访问后面的普通摄像头

    我正在尝试在 iPhone 11 Pro 上使用 普通 相机 我使用反应本机视觉相机 当我运行这段代码时 const devices useCameraDevices const deviceBack devices back consol
  • iOS 中 NSDecimalNumber 的小数分隔符错误

    我尝试通过以下方式输出具有正确的小数分隔符的十进制数的描述 NSString strValue 9 94300 NSDecimalNumber decimalNumber NSDecimalNumber decimalNumberWithS
  • ios7 故事板项目不会移动

    我试图在我的视图控制器布局中移动故事板项目 但是当在模拟器中运行时 它们不会移动 它们似乎粘在我放置它们的上方的橙色虚线上 那些橙色线是什么 为什么我无法移动我的物品 Here s what it looks like in the sim
  • UIViewControllerAnimatedTransitioning:旋转更改后黑屏片段

    我已经创建了一个视图控制器转换 只要我不更改设备方向 一切都正常 图 1 显示了应有的屏幕 然后我切换到下一个视图控制器 在其中更改方向 现在我回到第一个视图控制器并再次切换方向 然后我得到的结果如图 2 所示 出现黑色边框 请不要介意屏幕
  • ReactiveCocoa 将 SignalProducers 合二为一

    我正在使用 ReactiveCocoa 并且我有几个 SignalProducers let center NSNotificationCenter defaultCenter let signalProducer1 center rac
  • 如何向标准 UIButton 添加徽章? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 是否可以在标准中添加看起来标准的徽章UIButton 如果不支持半原生 那么实现此目的最简单的方法是什么 示例图片 这是 Sascha
  • 访问目标 c 中的类方法。使用 self 还是类名?

    我正在学习 iOS 编程 并且对以下有关关键字 self 的使用的代码感到困惑 据我了解 self就像Java的this 它指的是当前实例 当我想调用类方法时 通常的方式应该是这样 PlayingCard validSuits 但是侵入实例
  • iOS:如何知道 reloadData() 已完成其任务?

    我想滚动到给定索引 self boldRowPath 但是当我调试时scrollToRow之前执行reloadData 如何知道reloadData已完成 func getAllTimeEvent self arrAllTimeEvent
  • CoreBluetooth:检测设备超出范围/连接超时

    我正在设计一个 iOS 框架来处理多个 BLE 设备 均为同一类型 目前一切都运行良好 除了一件事 客户想要一个包含可用设备的列表 但是 我如何检测过去发现的设备何时不再可用 当我尝试连接到不再可用的设备时 会出现另一个问题 文档说 连接尝
  • 是否可以跨 2 个不同的 iOS 应用程序访问数据?

    假设我在 App1 中存储了一些 ID 数据 并希望在同一设备上的 App2 中访问它 平台上可以这样吗 如果没有的话有什么解决方法吗 您可以使用iOS 钥匙扣 http developer apple com library ios do
  • 像 TraceGL 一样分析 Objective C 中的代码路径?

    TraceGL 是一个非常简洁的项目 它允许 JS 程序员跟踪 Javascript 中的代码路径 它看起来像这样 我想为 Objective C 构建类似的东西 我知道运行时使跟踪方法调用变得相当容易 但是我如何跟踪控制流 例如 在上面的
  • 更改 iOS7 中 UIAlertView 的字体大小

    我想更改alertView中消息文本和标题文本的字体大小 苹果网站上没有任何文档谈到这一点 但苹果在其子类注释中表示 UIAlertView 类旨在按原样使用 请参考以下链接 https developer apple com librar

随机推荐

  • Azure Application Insights 中的用户代理信息

    有谁知道为什么 Application Insights 在 NET 应用程序中实现时不会收集用户代理信息 但能够收集浏览器上的统计信息 我希望能够过滤掉针对特定用户代理字符串的请求 但看起来我无法看到具有任何可用数据 表的用户代理 对于
  • iPhone - 图像叠加MapKit框架?

    我可以看到 使用 iOS4 您现在可以在谷歌地图上平铺图像 一直在查看苹果的 TileMap 示例 这很棒 因为这就是我想要做的 但从我所看到的来看 我需要知道图像的 GEO 参考 以便我可以使用适当的缩放级别等对图像进行光栅化 我拥有的是
  • 将图片保存到媒体库中的自定义文件夹

    WhatsApp 现在将图片保存到媒体库中名为 WhatsApp 的自定义文件夹中 WhatsApp 是否使用未记录的 API 或者每个开发人员都可以这样做吗 现在我只知道可以将图片保存到 相机胶卷 或 保存的图片 中 WhatsApp 似
  • 使用 ”。” zend validator float 中的小数

    我有一个表单 其中包含一个名为 价格 的元素 我使用 float 验证器验证此元素 问题是当我插入时 例如 12 50 gt 它是有效的 但是当我尝试将其保存在数据库 mysql 上时 它被保存为 12 00 所以我想将小数字符从 更改为
  • 替换 Eclipse 中所有文件中的字符串[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何在当前项目的所有文件中搜索并替换字符串 假设我有字符串 sites default 现在我希望它是 public sites defa
  • PHP glob() 列出不以下划线开头的文件?

    标准的 glob 函数用法如下 dir glob txt foreach dir as filename echo filename size filesize filename n 使用 作为通配符 但是有没有办法否定它以忽略任何以下划线
  • Google 地图 V3 不会删除事件侦听器

    我在使用 Google 地图 API v3 时遇到问题 我试图在缩放更改时删除鼠标悬停侦听器 这是我的代码 document ready function var myOptions var map new google maps Map
  • Android LruCache(Android 3.1)线程安全

    是新的Android类LruCache http developer android com reference android util LruCache html线程安全 java 文档说 这个类是线程安全的 通过在缓存上同步以原子方式
  • 用Qt等待一个SLOT完成执行

    在我的代码中我发出一个信号mySignal我想等待连接的插槽结束mySlot在继续之前执行 emit mySignal Wait for the end of mySlot execution Some code that has to b
  • 使用 CLASSIC ASP 将数据返回到 jsonp 调用

    我已经浏览了 stackoverflow 上的帖子 但似乎找不到我要找的东西 如果我这样做 表格 ajaxSettings dataType jsonp get http MYREMOTESERVER com GetCustNewID as
  • C# 检查网络状态

    如何检查我是否有开放的网络连接并且可以联系 C 中的特定 IP 地址 我在 VB Net 中见过示例 但它们都使用 My 结构 谢谢 如果您只想检查网络是否正常 请使用 bool networkUp System Net NetworkIn
  • 为什么“rails runner -e production”不起作用?

    为了解决我的问题 该问题在 生产中的 will paginate 错误未定义方法 paginate https stackoverflow com questions 19577344 will paginate error in prod
  • 如何使用查找和替换在 Xcode 中用单个新行替换多个新行

    在Xcode项目中 我们编写程序时一般不会关注行间距 那么编码完成后 如何用一行删除所有多余的换行符呢 在文本搜索字段中 可以使用以下方法进行多行 非打印字符 搜索 替换 假设我想替换所有实例 This is a comment with
  • 我的 Cocos2D-iPhone 游戏可以支持 VoiceOver 吗?

    我正在制作一款游戏 玩家通过动作对声音做出反应 由于玩游戏不需要视觉元素 而且许多人都是闭着眼睛玩的 所以不完全兼容 VoiceOver 似乎很遗憾 我目前正在使用 Cocos2D iPhone 和 CocosDenshion 来处理音频
  • php图像显示无需在邮件中下载

    您好 我想使用 php 邮件程序类发送 html 格式的图像 但图像下载后显示在邮件中 但我想显示图像而不下载 邮件程序类中是否有任何选项或者有另一种方法 或者我必须以其他格式发送图像 好吧 可能的答案只有两种 您不想在电子邮件中嵌入实际的
  • 使用 IO 在 C# 中读取十六进制

    我是从 Java 转向 C 的新手 我正在尝试使用十六进制 IO 读取文件 当我读取第一个字节时 我看不到我在十六进制编辑器中看到的内容 我在用着 StreamReader reader new StreamReader fileDirec
  • 如何获得与 Apple 推送通知一起播放的自定义声音?

    我正在尝试在发送 Apple 推送通知时播放自定义声音 显示弹出消息 徽章也会更新 但我总是播放默认的 iPhone 声音 而不是我的自定义声音 这是我发送的 JSON 数据 aps sound sound caf badge 2 aler
  • 将值返回给不同的 Activity

    我有一个应用程序 基本上看起来像附图中的设计 可以看到 有4个Activity 部分Activity有碎片 我想将测试的答案返回到用户的个人资料中 到目前为止 我一直将结果上传到服务器 并让应用程序在用户每次返回时更新用户的个人资料简介活动
  • ng-repeat 过滤器“显示所有”项目(如果未选择过滤器)

    我有一个ng repeat过滤器使用
  • iOS 7 UIWebView 键盘问题

    我必须像这里一样删除这个栏link https stackoverflow com questions 13101642 ios keyboard style in webview但对于 iOS 7 此代码不起作用 我们通过一些 Objec