有時候總是有需求來獲取當前的第一響應者,例如讓TextField收鍵盤,隱藏視圖等等操作都需要獲取當前的第一響應者,那么該如何獲取呢?
UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];
UIView *firstResponder = [keyWindow performSelector:@selector(firstResponder)];
NSLog(@"%@",firstResponder);
注意:
這個方法雖然簡單,但是調用了私有API在平時調試的時候可以使用這種方法,但是打包上線的時候需要把該方法屏蔽掉,不然極有可能被打回。
下面介紹下現在公認比較好的一種方法:
建立分類UIResponder+FirstResponder
//
// UIResponder+FirstResponder.h
// BobcareDoctorApp
//
// Created by Japho on 16/3/23.
// Copyright ? 2016年 com.01wisdom. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface UIResponder (FirstResponder)
+ (id)currentFirstResponder;
@end
//
// UIResponder+FirstResponder.m
// BobcareDoctorApp
//
// Created by Japho on 16/3/23.
// Copyright ? 2016年 com.01wisdom. All rights reserved.
//
#import "UIResponder+FirstResponder.h"
static __weak id currentFirstResponder;
@implementation UIResponder (FirstResponder)
+ (id)currentFirstResponder {
currentFirstResponder = nil;
[[UIApplication sharedApplication] sendAction:@selector(findFirstResponder:) to:nil from:nil forEvent:nil];
return currentFirstResponder;
}
- (void)findFirstResponder:(id)sender {
currentFirstResponder = self;
}
@end