键盘管理IQKeyboardManagerSwift全解

简要:

  • IQKeyboardManagerSwift:自动管理键盘,防止覆盖输入框,无需代码,适合快速集成。
  • IQKeyboardCore:提供辅助功能,非独立使用,包含视图扩展和协议。
  • IQKeyboardNotification:轻量级键盘事件监听,易于订阅键盘变化。
  • IQKeyboardReturnManager:管理回车键,方便导航到下一个输入框。
  • IQKeyboardToolbar:自定义键盘工具栏,支持上一页、下一页和完成按钮。
  • IQKeyboardToolbarManager:全局管理工具栏,统一应用设置。
  • IQTextInputViewNotification:监听输入框事件,如聚焦和失焦。
  • IQTextView:支持占位符的文本视图,增强用户体验。

1. IQKeyboardManagerSwift

  • 概述
    IQKeyboardManagerSwift 是一个无需代码的通用库,防止键盘覆盖 UITextFieldUITextView,自动管理键盘行为。

  • 主要功能

    • 自动调整键盘与输入框的距离,无需 UIScrollView 或子类化。
    • 支持所有方向,包含工具栏(Previous、Next、Done 按钮)。
    • 可定制化:调整键盘与输入框的距离、工具栏按钮行为、导航音效等。
    • 不需要手动导入,集成简单。
  • 主要属性和方法

    • shared: 返回单例实例。
    • isEnabled: 启用或禁用管理器(Bool)。
    • keyboardDistanceFromTextField: 设置键盘与输入框的距离(默认 10,单位像素)。
    • preventShowingBottomBlankSpace: 防止键盘滑动时显示底部空白区域(默认 YES)。
    • enableAutoToolbar: 启用自动工具栏(默认 YES)。
    • toolbarManageBehaviour: 设置工具栏管理行为(IQAutoToolbarBySubviews 或 IQAutoToolbarByTag)。
    • shouldResignOnTouchOutside: 触摸外部时隐藏键盘(Bool)。
    • resignFirstResponder(): 使当前第一响应者失焦。
    • canGoPrevious, canGoNext: 检查是否能导航到前一或后一输入框(只读)。
    • goPrevious(), goNext(): 导航到前一或后一输入框(返回 Bool)。
  • 安装

    • CocoaPods: pod 'IQKeyboardManagerSwift' 或特定版本如 pod 'IQKeyboardManagerSwift', '8.0.0'
    • Carthage: 添加 github "hackiftekhar/IQKeyboardManager" 到 Cartfile,运行 carthage update --use-xcframeworks,包含 IQKeyboardManagerSwift.xcframework
    • SPM: 通过 Xcode 安装。
  • 使用示例

    import IQKeyboardManagerSwift
    
    @main
    class AppDelegate: UIResponder, UIApplicationDelegate {
        func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
            IQKeyboardManager.shared.isEnabled = true
            IQKeyboardManager.shared.keyboardDistanceFromTextField = 20
            return true
        }
    }
    
    • 注解:启用管理器并设置键盘与输入框的距离为 20 像素。
  • 注意事项

    • 不建议作为第三方库依赖,可能与其他库冲突,需在呈现/隐藏第三方 UI 时启用/禁用。
    • 版本 7.2.0 引入子模块(如 Appearance、IQKeyboardReturnManager 等),8.0.0 移除已废弃类。

2. IQKeyboardCore

  • 概述
    IQKeyboardCore 提供 IQKeyboard 相关库的公共函数和扩展,不独立使用,包含 IQTextInputView 协议和 UIView 扩展。

  • 主要功能

    • IQTextInputView 协议:由 UITextFieldUITextViewUISearchBar 采纳。
    • IQEnableMode 枚举:支持默认、启用、禁用模式。
    • UIView 扩展:提供 viewContainingController()superviewOf(type:belowView:) 等方法。
  • 主要方法

    • viewContainingController(): 获取包含当前视图的控制器。
    • superviewOf(type:belowView:): 查找指定类型的父视图。
    • textFieldSearchBar(): 检查是否为文本字段或搜索栏。
    • isAlertViewTextField(): 检查是否为警告视图的文本字段。
  • 使用示例

    import IQKeyboardCore
    
    let controller = view.iq.viewContainingController()
    let scrollView = view.iq.superviewOf(type: UIScrollView.self)
    
    • 注解:获取当前视图的控制器和父滚动视图。

3. IQKeyboardNotification

  • 概述
    IQKeyboardNotification 是一个轻量级库,方便订阅键盘事件,获取键盘框架变化。

  • 主要功能

    • 通过唯一标识符订阅键盘事件。
    • 提供键盘事件和框架信息。
  • 主要方法

    • init(): 初始化通知实例。
    • subscribe(identifier:action:): 订阅键盘事件,闭包接收事件和框架。
    • unsubscribe(identifier:): 取消订阅。
  • 使用示例
    import IQKeyboardNotification
    
    private let keyboard: IQKeyboardNotification = .init()
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        keyboard.subscribe(identifier: "myID") { event, frame in
            print("Keyboard event: \(event), frame: \(frame)")
        }
    }
    
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        keyboard.unsubscribe(identifier: "myID")
    }
    
    • 注解:在视图出现时订阅键盘事件,消失时取消订阅。

4. IQKeyboardReturnManager

  • 概述
    IQKeyboardReturnManager 管理回车键行为,支持导航到下一个响应者或隐藏键盘。

  • 主要功能

    • 自动处理回车键导航。
    • 自定义回车键类型(如 Done)。
  • 主要方法

    • init(): 初始化管理器。
    • addResponderSubviews(of:recursive:): 添加响应者子视图,递归处理。
    • dismissTextViewOnReturn: 设置是否在回车时隐藏文本视图(Bool)。
    • lastTextInputViewReturnKeyType: 设置最后一个输入视图的回车键类型。
  • 使用示例
    import IQKeyboardReturnManager
    
    let returnManager: IQKeyboardReturnManager = .init()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        returnManager.addResponderSubviews(of: self.view, recursive: true)
        returnManager.dismissTextViewOnReturn = true
        returnManager.lastTextInputViewReturnKeyType = .done
    }
    
    • 注解:启用回车键导航,设置隐藏文本视图和最后回车键为 Done。

5. IQKeyboardToolbar

  • 概述
    IQKeyboardToolbar 提供自定义键盘工具栏功能,支持添加 Previous、Next、Done 按钮。

  • 主要功能

    • 添加工具栏按钮,如 Previous、Next、Done。
    • 自定义按钮标题或图片,添加额外按钮。
  • 主要方法

    • addPreviousNextDone(target:previousAction:nextAction:doneAction:showPlaceholder:): 添加 Previous、Next、Done 按钮。
    • addPreviousNextRight(target:previousConfiguration:nextConfiguration:rightConfiguration:title:): 添加自定义按钮。
    • addDone(target:action:title:): 添加 Done 按钮。
    • hidePlaceholder: 隐藏占位符(Bool)。
    • placeholder: 设置自定义占位符。
  • 使用示例
    import IQKeyboardToolbar
    
    textField.iq.addPreviousNextDone(target: self, previousAction: #selector(previousAction), nextAction: #selector(nextAction), doneAction: #selector(doneAction), showPlaceholder: true)
    
    • 注解:为文本字段添加 Previous、Next 和 Done 按钮,显示占位符。

6. IQKeyboardToolbarManager

  • 概述
    IQKeyboardToolbarManager 全局管理键盘工具栏,提供统一设置。

  • 主要功能

    • 启用和定制工具栏,检查导航能力。
  • 主要方法

    • isEnabled: 启用或禁用管理器(Bool)。
    • toolbarConfiguration: 定制工具栏外观(如 tintColor、barTintColor)。
    • canGoPrevious, canGoNext: 检查是否能导航(只读)。
    • goPrevious(), goNext(): 导航到前一或后一输入框。
  • 使用示例
    import IQKeyboardToolbarManager
    
    IQKeyboardToolbarManager.shared.isEnabled = true
    IQKeyboardToolbarManager.shared.toolbarConfiguration.tintColor = .blue
    
    • 注解:启用工具栏管理器,设置工具栏颜色为蓝色。

7. IQTextInputViewNotification

  • 概述
    IQTextInputViewNotification 方便订阅 UITextField/UITextView 的聚焦和失焦事件。

  • 主要功能

    • 订阅输入框事件,获取事件和输入视图信息。
  • 主要方法

    • init(): 初始化通知实例。
    • subscribe(identifier:action:): 订阅事件,闭包接收事件信息。
    • unsubscribe(identifier:): 取消订阅。
  • 使用示例
    import IQTextInputViewNotification
    
    private let textInputViewObserver: IQTextInputViewNotification = .init()
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        textInputViewObserver.subscribe(identifier: "myID") { info in
            print("Event: \(info.event.name), TextInputView: \(info.textInputView)")
        }
    }
    
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        textInputViewObserver.unsubscribe(identifier: "myID")
    }
    
    • 注解:订阅输入框事件,打印事件名称和相关视图。

8. IQTextView

  • 概述
    IQTextView 是 UITextView 的子类,支持占位符功能。

  • 主要功能

    • 设置占位符文本和颜色,兼容 IQKeyboardToolbarManager。
  • 主要方法

    • placeholder: 设置占位符文本。
    • placeholderTextColor: 设置占位符颜色。
  • 使用示例

    import IQTextView
    
    let textView = IQTextView()
    textView.placeholder = "Enter your message here..."
    textView.placeholderTextColor = .lightGray
    
    • 注解:创建支持占位符的文本视图,设置占位符和颜色。

功能与方法总结表

以下是各库的主要功能和方法汇总:

库名 主要功能 主要方法
IQKeyboardManagerSwift 自动键盘管理,工具栏定制 isEnabled, keyboardDistanceFromTextField, goNext()
IQKeyboardCore 辅助功能,视图扩展 viewContainingController(), superviewOf(type:)
IQKeyboardNotification 键盘事件订阅 subscribe(identifier:action:), unsubscribe(identifier:)
IQKeyboardReturnManager 回车键导航管理 addResponderSubviews(of:recursive:), dismissTextViewOnReturn
IQKeyboardToolbar 自定义键盘工具栏 addPreviousNextDone(target:previousAction:nextAction:doneAction:), hidePlaceholder
IQKeyboardToolbarManager 全局工具栏管理 isEnabled, toolbarConfiguration, canGoPrevious
IQTextInputViewNotification 输入框事件监听 subscribe(identifier:action:), unsubscribe(identifier:)
IQTextView 支持占位符的文本视图 placeholder, placeholderTextColor
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容