接口部分
@interface KeyboardMonitor : NSObject
+ (KeyboardMonitor *)monitorWithShowBlock:(void (^)(CGFloat height))showBlock hideBlock:(void (^)(void))hideBlock;
- (void)begin;
- (void)end;
@end
实现部分
@interface KeyboardMonitor()
@property (copy,nonatomic) void(^showBlock)(CGFloat height);
@property (copy,nonatomic) void(^hideBlock)(void);
@property (assign,nonatomic) BOOL monitoring;
@end
@implementation KeyboardMonitor
- (instancetype)init
{
self = [super init];
if (self) {
//初始化操作
self.monitoring = NO;
//监听当键盘将要出现时
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil];
//监听当键将要退出时
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillHide:)
name:UIKeyboardWillHideNotification
object:nil];
}
return self;
}
+ (KeyboardMonitor *)monitorWithShowBlock:(void (^)(CGFloat height))showBlock hideBlock:(void (^)(void))hideBlock
{
KeyboardMonitor *keyboardMonitor = [[KeyboardMonitor alloc] init];
keyboardMonitor.showBlock = showBlock;
keyboardMonitor.hideBlock = hideBlock;
return keyboardMonitor;
}
//当键盘出现
- (void)keyboardWillShow:(NSNotification *)notification
{
if (self.monitoring == NO) {
return;
}
//获取键盘的高度
NSDictionary *userInfo = [notification userInfo];
NSValue *value = [userInfo objectForKey:UIKeyboardFrameEndUserInfoKey];
CGRect keyboardRect = [value CGRectValue];
int height = keyboardRect.size.height;
if (self.showBlock) {
self.showBlock(height);
}
}
//当键退出
- (void)keyboardWillHide:(NSNotification *)notification
{
if (self.monitoring == NO) {
return;
}
if (self.hideBlock) {
self.hideBlock();
}
}
- (void)begin
{
self.monitoring = YES;
}
- (void)end
{
self.monitoring = NO;
}
-(void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。