简要:
- IQKeyboardManagerSwift:自动管理键盘,防止覆盖输入框,无需代码,适合快速集成。
- IQKeyboardCore:提供辅助功能,非独立使用,包含视图扩展和协议。
- IQKeyboardNotification:轻量级键盘事件监听,易于订阅键盘变化。
- IQKeyboardReturnManager:管理回车键,方便导航到下一个输入框。
- IQKeyboardToolbar:自定义键盘工具栏,支持上一页、下一页和完成按钮。
- IQKeyboardToolbarManager:全局管理工具栏,统一应用设置。
- IQTextInputViewNotification:监听输入框事件,如聚焦和失焦。
- IQTextView:支持占位符的文本视图,增强用户体验。
1. IQKeyboardManagerSwift
-
概述:
IQKeyboardManagerSwift 是一个无需代码的通用库,防止键盘覆盖UITextField或UITextView,自动管理键盘行为。 -
主要功能:
- 自动调整键盘与输入框的距离,无需 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 安装。
- CocoaPods:
-
使用示例:
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协议:由UITextField、UITextView和UISearchBar采纳。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 |