ACRKeyboardObserver 0.4.0

ACRKeyboardObserver 0.4.0

测试测试通过
语言 SwiftSwift
许可证 MIT
发布最新发布2017年10月
SwiftSwift版本3.0
SPM支持SPM

Andrew Crookston 维护。



  • 作者:
  • Andrew Crookston

ACRKeyboardObserver

Swift iOS 键盘观察者,帮助您管理键盘通知,框架更改,并简化动画。

ACRKeyboardObserver 可以轻松处理 iOS 键盘状态变化,如 willShowdidHide。它还提供了比原生回调更准确的键盘框架大小。这在以交互方式关闭键盘时特别有用。

安装

使用 CocoaPods 进行安装。

platform :ios, '8.0'
use_frameworks!
pod 'ACRKeyboardObserver'

使用

在 AppDelegate 中启动/停止观察者

class AppDelegate: UIResponder, UIApplicationDelegate {

    

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        ACRKeyboardObserver.observer.start()
        return true
    }

    

    func applicationWillTerminate(application: UIApplication) {
        ACRKeyboardObserver.observer.stop()
    }
}

UIViewController 示例

  1. 首先将控制器添加为观察者的代理。
  2. 实现代理方法 keyboardChanged(status: KeyboardStatus)
  3. 在代理方法中更新视图
    1. 可以通过使用可选的动画对象。
    2. 或者直接更新框架。

import UIKit
import ACRKeyboardObserver

class SomeKeyboardController: UIViewController, ACRKeyboardObserverDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
        // 1.
        ACRKeyboardObserver.observer.addDelegate(self)
    }

    // 2.
    func keyboardChanged(_ status: KeyboardStatus) {
        // 3.1.
        if let animation = status.animation {
            UIView.animate(withDuration: animation.duration, delay: 0, options: animation.option, animations: { () -> Void in
                self.updateFrameFromKeyboard(top: animation.top)
            }, completion: nil)
        } else if let frame = status.frame {
            // 3.2.
            updateFrameFromKeyboard(top: frame.origin.y)
        }
    }

    func updateFrameFromKeyboard(top: CGFloat) {
        // update some views
    }
}

我会扩展文档,但代码相当简单,应该很容易阅读。

已知问题

如果您允许用户以交互方式删除键盘,例如

textView.keyboardDismissMode = .interactive

当用户开始拖动以删除时,您将收到 status.state == .frameChanged 通知。当拖动完成并且键盘实际上被关闭时,您还将收到 .WillHide.DidHide 调用。这些调用,一如既往,包括键盘框架,但它没有报告实际的框架/原点。我还没有决定如何处理这个问题,但倾向于不相信 iOS 关于键盘大小的报告,而是找出实际的键盘框架。

一种解决方案是查看您的视图,如果它们处于“键盘已隐藏”状态,请忽略 .willHide.didHide 调用。

许可证

MIT

贡献

我乐意包含任何改进。目前没有测试或演示应用程序,所以我必须手动测试任何贡献,但请不要因此停止。这些项目可能是一个帮助的好地方。;)

我没有进行广泛的错误测试,但基本功能在我的应用程序中正常工作。如果您发现什么问题,请发布一个bug并我会查看它。我通常能快速做出回应。

感谢您吗?

我喜欢听我的东西正常工作(或不正常)时的声音,所以如果觉得这个库有帮助,请告知我。在我的推特上找到我@acr,或者在这里的GitHub上联系我。

祝您使用愉快!