我无法弄清楚哪个UITextField
是当前的第一响应者。
我想要做的是,如果用户点击特定的UITextField
,则设置一个布尔值。为此,我需要能够判断这个特定的文本字段是否已成为第一个响应者。
我知道如何设置第一个响应者,但不知道如何判断一个字段是否真正成为第一个响应者。
答案 0 :(得分:25)
[...]但只是不确定如何判断一个字段是否真的成为了 第一响应者。
UIView
继承isFirstResponder
的{{1}}方法,告诉您这一点。
查找第一响应者的最简单方法是不检查单个控件/视图,并且没有针对所有不同类型的可能第一响应者的多个方法,只需在UIResponder
上创建一个类别,即添加{UIView
1}}方法:
<强>的UIView + FirstResponder.h 强>
findFirstResponder
<强>的UIView + FirstResponder.m 强>
#import <UIKit/UIKit.h>
@interface UIView (FirstResponder)
- (UIView *)findFirstResponder;
@end
答案 1 :(得分:4)
为什么不使用UITextFieldDelegate并实现textFieldDidBeginEditing:方法?只要文本字段获得焦点,就会调用此方法。
答案 2 :(得分:3)
if(![myTextField isFirstResponder])
{
// do stuff
}
答案 3 :(得分:1)
我可能会喜欢这个
向ViewController添加属性
@property (nonatomic, strong) UITextField *firstRespondField;
注册TextField Notificaiton
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(textFieldTextDidBeginEditing:)
name:UITextFieldTextDidBeginEditingNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(textFieldTextDidEndEdition:)
name:UITextFieldTextDidEndEditingNotification
object:nil];
别忘了在Dealloc上删除它
[[NSNotificationCenter defaultCenter] removeObserver:self];
然后实施2方法
- (void)textFieldTextDidBeginEditing:(NSNotification *)aNotification {
self.firstRespondField = aNotification.object;
}
- (void)textFieldTextDidEndEdition:(NSNotification *)aNotification {
self.firstRespondField = nil;
}
最后,我可能会通过
获得FirstResponder对象self.firstRespondField
答案 4 :(得分:0)
如果是第一个响应者,你可以在你想知道的视图上调用UIView.IsFirstResponder。