Swift 中 UITextView 和 UITextField 的单一扩展

2023-12-07

我想创建一个扩大对彼此而言UITextField and UITextView并向其中添加以下方法:

    func addDoneButtonOnKeyboardWith(selector : Selector)
    {
        let keyBoardToolBar = UIToolbar(frame: CGRect(x: 0, y: 0, width: 320, height: 30))
        let barButtonItem = UIBarButtonItem(barButtonSystemItem: .done, target: nil, action: selector)
        let flexibleSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
        keyBoardToolBar.items = [flexibleSpace, barButtonItem]
        keyBoardToolBar.barStyle = .default
        self.inputAccessoryView = keyBoardToolBar
        self.reloadInputViews()
    }

我希望扩展方法仅适用于UITextField and UITextView.


我有一个想法,可以利用协议的默认实现来做你想做的事情。从技术上来说您仍然需要两个扩展,但它们都完全是空的。考虑以下:

为您的方法创建一个协议,并提供默认实现:

protocol DoneButtonBearer {
    func addDoneButtonOnKeyboardWith(selector: Selector)
}

extension DoneButtonBearer {
    func addDoneButtonOnKeyboardWith(selector: Selector) {
        var view: UIView?
        defer  {
            if view != nil {
                let keyBoardToolBar = UIToolbar(frame: CGRect(x: 0, y: 0, width: 320, height: 30))
                let barButtonItem = UIBarButtonItem(barButtonSystemItem: .done, target: nil, action: selector)
                let flexibleSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
                keyBoardToolBar.items = [flexibleSpace, barButtonItem]
                keyBoardToolBar.barStyle = .default
                view!.inputAccessoryView = keyBoardToolBar
                view!.reloadInputViews()
            }
        }
        if let textField = self as? UITextField {
            view = textField
            return
        }
        if let textView = self as? UITextView {
            view = textView
            return
        }
    }
}

然后只需扩展UITextField and UITextView具有此功能:

extension UITextField: DoneButtonBearer { }

extension UITextView: DoneButtonBearer { }

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

Swift 中 UITextView 和 UITextField 的单一扩展 的相关文章

  • 尝试从 json 获取数据时对成员 `jsonObject(with:options:)` 的引用不明确

    我是 Swift 新手 在制作其中一个教程 相当旧 时涉及通过返回 JSON 的 php 从服务器获取凭据 但我遇到了错误Ambiguous reference to member jsonObject with options 在 jso
  • 无效图像路径 - 在路径中找不到图像。 CFBundleIcons Xcode 5

    我正在尝试使用 Xcode 5 0 更新我的 iOS 7 应用程序 一切正常 但是当我存档然后验证时 我收到以下消息 图像路径无效 在键下引用的路径中找不到图像CFBundleIcons APP ICON 57 我尝试删除并添加图像 并手动
  • 裁剪图像和中心

    在 Swift 中如何裁剪图像并将其放在中心 我已经裁剪了图像 但想将其放在中间 ImgView image OrigImage var masklayer CAShapeLayer masklayer frame ImgView fram
  • AVAudioSessionManager availableInputs“未知为端口 iPhone 麦克风选择的数据源”

    我在控制台日志中注意到这个错误已经有一段时间了 虽然它不影响我的应用程序的执行 但我觉得它真的很烦人 于是 我开始追查这个错误是从哪里来的 事实证明 当我调用 availableInputs 时 NSArray inputs AVAudio
  • 将警报视图“是”按钮设置为粗体,将“否”按钮设置为正常

    我有警报视图 其中有 是 和 否 选项 看起来像下面这样 使用的代码是 UIAlertView confAl UIAlertView alloc initWithTitle message Are you sure delegate sel
  • UniversalLink 不适用于 iOS 14 设备,但在模拟器上运行良好

    以下解决方案可以在模拟器上支持universalLink 我有一个支持 UniversalLink 的应用程序 用户单击网站中支持的链接 将导航到应用程序中的功能 但它无法在 iOS 14 beta 4 上运行 它不是打开应用程序 而是打开
  • iOS Facebook SDK 通过图搜索来搜索用户

    我是图形搜索新手 我想搜索具有电子邮件地址的用户 那可能吗 现在 我只知道如何使用他们的名字进行搜索 如下所示 https graph facebook com search q chandler de angelis type user
  • UIStackView - 拖动以重新排序排列的子视图?

    我试图获得一些关于如何实现在 a 上发现的相同类型的 拖动重新排序 行为的建议 UITableView但在一个UIStackView 到目前为止 这就是我的想法 为每个按钮添加一个长按手势识别器arrangedSubviews 长按时 添加
  • TDD VS BDD:REST 服务

    我对 TDD 与 BDD 很困惑 TDD 和 BDD 在以下各点上有何不同 开发 先测试用例 再开发 RestService HTTP 不进行休息调用 如果是这样 a 我们是否使用模拟对象仅返回硬编码的 json b 如何处理 REST 调
  • 在 swift 中实现自定义markerInfoWindow不起作用

    我一直在使用下面发布的方法来显示自定义信息窗口 但是每当我运行它时 只显示默认窗口 带有标题 片段 我已经为以下方法创建了 xib 和 swift 文件 并且我尝试使用标准函数表示法 即 mapView mapView markerInfo
  • xamarin 中的本机链接错误

    我今天尝试编译我的 xamarin 项目 突然收到以下错误 错误 MT5210 本机链接失败 未定义符号 mono handle global vregs 请验证是否已引用所有必要的框架并且本机库是否正确 链接到 错误 MT5210 本机链
  • 以编程方式使后退按钮转到上一个视图

    我有一个 UIBarButtonItem 并且想以编程方式设置转到前一个控制器的操作 在我的例子中 我之前的视图是 UITableViewController 下面是我当前用来制作栏按钮项目的代码 尽管该按钮尚未转到上一个视图 UIBarB
  • iOS APNS:以字符串格式将设备令牌发送给提供商

    我需要通过调用在我的请求中需要 JSON 数据的服务 将 iOS 应用程序的 APNS 设备令牌发送给我的提供商 我正在阅读苹果的本地和推送通知编程指南 https developer apple com library ios docum
  • Ionic 3 Deeplinking - 从 URL 启动应用程序

    我正在使用 Ionic 开发一个跨平台应用程序 当尝试实现深度链接时 我安装了一个名为 Ionic Native 插件深层链接 我运行了这些命令 ionic cordova plugin add ionic plugin deeplinks
  • 选择退出单个视图的自动布局?

    我有一个在代码中执行其子视图布局的视图 布局对于自动布局来说太复杂 并且自动布局会破坏布局代码 有没有办法强制自动布局不影响该视图的子视图 我尝试过重写layoutSubviews 但没有任何乐趣 谢谢你的帮助 每个情节提要或 XIB 启用
  • 为什么在 Quick 单元测试中会多次调用 before- 和 afterEach 块?

    我编写了一个测试用例 其中包含一些示例组 包括beforeEach and afterEach 我期望每个beforeEach and afterEach每个都会被调用一次it 唉 对于一个人来说it the beforeEach and
  • 在 iOS 上使用 AVCodec 将原始 YUV420P 编码为 h264

    我正在尝试编码从一个收集的单个 YUV420P 图像CMSampleBuffer to an AVPacket这样我就可以使用 RTMP 通过网络发送 h264 视频 发布的代码示例似乎可以作为avcodec encode video2回报
  • 如何使用 NSMutableArray 中的数据通过 NSUserDefaults 保存数据

    My NSMutableArray在我的 h 文件中声明如下 property strong nonatomic NSMutableArray numbers 如何使用 NSMutableArray 保存输入的数据以保存到NSUserDef
  • 弹出窗口不指向按钮

    我有一个与 iPhone 和 iPad 布局兼容的应用程序 对于 iPhone 布局 我为 iPad 创建了 Action Sheet 和 Pop over 问题是弹出窗口的箭头没有指向我单击的按钮 下面是我的代码 let actionSh
  • iOS 7 仅横向应用程序无法访问照片库

    我有一个仅限风景的应用程序 每当我访问照片库时 应用程序就会崩溃 因为UIImagePickerViewController正在尝试以纵向模式加载 应用程序在 iOS 5 和 6 中运行良好 我收到以下错误 由于未捕获的异常而终止应用程序

随机推荐