Я предполагаю, что вы хотите знать, какой UITextField
является первым респондентом (текстовое поле, которое получает ввод с клавиатуры).
Для этого нет общедоступного API (хотя есть частный API). Вы можете отследить, какое текстовое поле является первым респондентом, вручную, используя метод textFieldDidBeginEditing:
каждого делегата текстового поля, или вы можете использовать небольшую хитрость, чтобы найти первого респондента в любое время.
Вот трюк. Объект UIApplication
знает, какой объект является первым респондентом, и может отправить ему сообщение. Таким образом, вы пишете такую категорию на UIResponder
:
UIResponder + firstResponderHack.h
#import <UIKit/UIKit.h>
@interface UIResponder (firstResponderHack)
+ (UIResponder *)firstResponderByHack;
@end
UIResponder + firstResponderHack.m
#import "UIResponder+firstResponderHack.h"
@interface FirstResponderFinder : NSObject
@property (strong, nonatomic) UIResponder *firstResponder;
@end
@implementation FirstResponderFinder
@synthesize firstResponder = _firstResponder;
@end
@implementation UIResponder (firstResponderHack)
- (void)putFirstResponderIntoFinder:(FirstResponderFinder *)finder {
if (self.isFirstResponder)
finder.firstResponder = self;
}
+ (UIResponder *)firstResponderByHack {
FirstResponderFinder *finder = [FirstResponderFinder new];
// Sending an action to nil sends it to the first responder.
[[UIApplication sharedApplication] sendAction:@selector(putFirstResponderIntoFinder:) to:nil from:finder forEvent:nil];
return finder.firstResponder;
}
@end
Затем вы можете найти первого респондента и проверить, является ли он UITextField
, например:
UIResponder *firstResponder = [UIResponder firstResponderByHack];
if (firstResponder && [firstResponder isKindOfClass:[UITextField class]]) {
UITextField *textField = (UITextField *)firstResponder;
// do something with textField
}