如何查找當前的第一響應者

有時候總是有需求來獲取當前的第一響應者,例如讓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  
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 好奇觸摸事件是如何從屏幕轉移到APP內的?困惑于Cell怎么突然不能點擊了?糾結于如何實現這個奇葩響應需求?亦或是...
    Lotheve閱讀 57,983評論 51 603
  • Core Animation基礎 Core Animation 利用了硬件加速和架構上的優化來實現快速渲染和實時動...
    獨木舟的木閱讀 1,560評論 0 3
  • 事件傳遞:響應者鏈 當你設計一個app的時候,你很可能需要你的app能夠動態響應某些事件。比如,觸摸可以發生在屏幕...
    hjfrun閱讀 1,044評論 1 5
  • 什么是事件? iOS中事件分為3大類 : 觸摸事件, 加速計事件和遠程控制事件.當你的手指在手機屏幕上觸摸時, 產...
    iYeso閱讀 180評論 0 1
  • 1.OC里用到集合類是什么? 基本類型為:NSArray,NSSet以及NSDictionary 可變類型為:NS...
    輕皺眉頭淺憂思閱讀 1,394評論 0 3