我无法确定哪个UITextField
是当前的第一响应者。获取目标C中的第一响应者
我想要做的是设置一个布尔值,如果用户点击一个特定的UITextField
。所以要做到这一点,我需要能够判断这个特定的文本字段是否成为第一响应者。
我知道如何设置第一响应者,但不知道如何判断一个字段是否真的成为第一响应者。
我无法确定哪个UITextField
是当前的第一响应者。获取目标C中的第一响应者
我想要做的是设置一个布尔值,如果用户点击一个特定的UITextField
。所以要做到这一点,我需要能够判断这个特定的文本字段是否成为第一响应者。
我知道如何设置第一响应者,但不知道如何判断一个字段是否真的成为第一响应者。
[...]但只是不知道如何判断一个字段是否实际上已成为 急救员。
UIView
继承UIResponder
的isFirstResponder
方法,它告诉你这一点。
最简单的方式找到任何第一反应是不检查各个控件/意见,并没有对各种不同类型的可能第一反应的多种方法是只做出UIView
类别增加了一个findFirstResponder
方法:
的UIView + FirstResponder.h
#import <UIKit/UIKit.h>
@interface UIView (FirstResponder)
- (UIView *)findFirstResponder;
@end
的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
为什么不使用UITextFieldDelegate并实现textFieldDidBeginEditing:方法?只要文本字段获得焦点,就会调用它。
您只需调用UIView.IsFirstResponder你想知道,如果它是第一个响应者的看法。
if(![myTextField isFirstResponder])
{
// do stuff
}
我可以做这样的
添加属性的ViewController
@property (nonatomic, strong) UITextField *firstRespondField;
注册文本字段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;
}
最后,我可能会被
self.firstRespondField
为什么它返回的UIView,而不是得到的UITextField对象FirstResponder? – zakdances 2012-05-25 05:22:51
@yourfriendzak由于UITextField不是唯一可以成为第一响应者的对象类型。 – Steve 2012-05-25 14:25:52