KBKeyboardObserver 0.0.2

KBKeyboardObserver 0.0.2

测试已测试
语言语言 Obj-CObjective C
许可 MIT
发布时间上次发布2014年12月

Kamil Borzym 维护。



  • Kamil Borzym

KBKeyboardObserver 是一个方便的键盘通知观察者。

欢迎提出建议!

安装

要安装 KBKeyboardObserver,可以

  • 使用 https://cocoapods.org.cn/
  • 或者将从项目复制 KBKeyboardObserver/KBKeyboardObserver.hKBKeyboardObserver/KBKeyboardObserver.m

使用

通过 alloc/init 创建一个新的 KBKeyboardObserver 对象,并设置代理

self.observer = [[KBKeyboardObserver alloc] initWithReferenceView:self.view];
self.observer.delegate = self;

或者使用方便的 UIViewController 方法代替

self.observer = [self registerForKeyboardNotifications:self];

实现代理方法以观察键盘行为(willShow, didShow, willHide 和 didHide)

- (void)keyboardObserver:(KBKeyboardObserver *)keyboardObserver observedKeyboardWillHideToRect:(CGRect)keyboardRect duration:(NSTimeInterval)duration;
- (void)keyboardObserver:(KBKeyboardObserver *)keyboardObserver observedKeyboardDidHideToRect:(CGRect)keyboardRect;
- (void)keyboardObserver:(KBKeyboardObserver *)keyboardObserver observedKeyboardWillShowToRect:(CGRect)keyboardRect duration:(NSTimeInterval)duration;
- (void)keyboardObserver:(KBKeyboardObserver *)keyboardObserver observedKeyboardDidShowToRect:(CGRect)keyboardRect;

示例

KBKeyboardObserver 目录包含示例项目。

内容缩进

KBKeyboardObserver 有助于设置 UIScrollView 的 contentIndents。

#import "KBKeyboardObserver.h"

@interface ExampleViewController : UIViewController <KBKeyboardObserverDelegate>

@property (nonatomic, strong) UITextView *exampleView;
@property (nonatomic, strong) KBKeyboardObserver *keyboardObserver;

@end

@implementation ExampleViewController

- (UITextView *)exampleView
{
    if (!_exampleView) {
        _exampleView = [[UITextView alloc] init];
    }
    return _exampleView;
}

- (void)loadView
{
    self.view = self.exampleView;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

      // 1 - create new observer and retain it
    self.keyboardObserver = [self registerForKeyboardNotifications:self];
}

#pragma mark - KBKeyboardObserverDelegate

- (void)keyboardObserver:(KBKeyboardObserver *)keyboardObserver observedKeyboardWillShowToRect:(CGRect)keyboardRect duration:(NSTimeInterval)duration
{
    // 2 - set content insets animation prior to the keyboard display
    UIEdgeInsets edgeInsets = UIEdgeInsetsMake(0, 0, keyboardRect.size.height, 0);
    [UIView animateWithDuration:duration
                     animations:^{
                        self.exampleView.contentInset = edgeInsets;
                        self.exampleView.scrollIndicatorInsets = edgeInsets;
                     }];
}

- (void)keyboardObserver:(KBKeyboardObserver *)keyboardObserver observedKeyboardWillHideToRect:(CGRect)keyboardRect duration:(NSTimeInterval)duration
{
    // 3 - set content insets animation after the keyboard dismissal
    [UIView animateWithDuration:duration
                     animations:^{
                        self.exampleView.contentInset = UIEdgeInsetsZero;
                        self.exampleView.scrollIndicatorInsets = UIEdgeInsetsZero;
                     }];
}

@end

布局元素

KBKeyboardObserver 有助于布局 UIView 的子视图。

#import "KBKeyboardObserver.h"

@interface ExampleViewController : UIViewController <KBKeyboardObserverDelegate>

@property (nonatomic, strong) UIView *redView;
@property (nonatomic, strong) KBKeyboardObserver *keyboardObserver;

@end

@implementation ExampleViewController 

- (UIView *)redView
{
    if (!_redView) {
        _redView = [[UIView alloc] init];
        _redView.backgroundColor = [UIColor redColor];
    }
    return _redView;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self.view addSubview:self.redView];
    self.redView.frame = CGRectMake(0, self.view.bounds.size.height - 100, 100, 100);

    self.keyboardObserver = [self registerForKeyboardNotifications:self];
}

#pragma mark - KBKeyboardObserverDelegate

- (void)keyboardObserver:(KBKeyboardObserver *)keyboardObserver observedKeyboardWillShowToRect:(CGRect)keyboardRect duration:(NSTimeInterval)duration
{
    [UIView animateWithDuration:duration
                     animations:^{
                         CGRect redViewFrame = self.redView.frame;
                         redViewFrame.origin.y = keyboardRect.origin.y - redViewFrame.size.height;
                         self.redView.frame = redViewFrame;
                     }];
}

- (void)keyboardObserver:(KBKeyboardObserver *)keyboardObserver observedKeyboardWillHideToRect:(CGRect)keyboardRect duration:(NSTimeInterval)duration
{
    [UIView animateWithDuration:duration
                     animations:^{
                         CGRect redViewFrame = self.redView.frame;
                         redViewFrame.origin.y = keyboardRect.origin.y - redViewFrame.size.height;
                         self.redView.frame = redViewFrame;
                     }];
}