在Objective C中获得第一响应者

use*_*329 3 iphone macos cocoa cocoa-touch objective-c

我无法弄清楚哪个UITextField是当前的第一响应者.

我想要做的是设置一个布尔值,如果用户点击特定的UITextField.所以要做到这一点,我需要能够判断这个特定的文本字段是否已成为第一个响应者.

我知道如何设置第一个响应者,但不知道如何判断一个字段是否真的成为第一个响应者.

Ste*_*eve 25

[...]但只是不确定如何判断一个领域是否真的成为第一个响应者.

UIView继承了告诉你的isFirstResponder方法UIResponder.

查找第一响应者的最简单方法是不检查单个控件/视图,并且没有针对所有不同类型的可能第一响应者的多个方法,只需创建一个类别,UIView其中添加了一个findFirstResponder方法:

UIView的+ FirstResponder.h

#import <UIKit/UIKit.h>

@interface UIView (FirstResponder)
- (UIView *)findFirstResponder;
@end
Run Code Online (Sandbox Code Playgroud)

UIView的+ FirstResponder.m

#import "UIView+FirstResponder.h"

@implementation UIView (FirstResponder)

- (UIView *)findFirstResponder
{
    if ([self isFirstResponder])
        return self;

    for (UIView * subView in self.subviews) 
    {
        UIView * fr = [subView findFirstResponder];
        if (fr != nil)
            return fr;
    }

    return nil;
}

@end
Run Code Online (Sandbox Code Playgroud)

  • @yourfriendzak因为UITextField不是唯一可以成为第一个响应者的对象类型. (3认同)