键盘管理IQKeyboardManagerSwift全解
简要:
- 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
|