2012-01-07 47 views
3

我无法确定哪个UITextField是当前的第一响应者。获取目标C中的第一响应者

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

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

回答

24

[...]但只是不知道如何判断一个字段是否实际上已成为 急救员。

UIView继承UIResponderisFirstResponder方法,它告诉你这一点。

最简单的方式找到任何第一反应是不检查各个控件/意见,并没有对各种不同类型的可能第一反应的多种方法是只做出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 
+0

为什么它返回的UIView,而不是得到的UITextField对象FirstResponder? – zakdances 2012-05-25 05:22:51

+3

@yourfriendzak由于UITextField不是唯一可以成为第一响应者的对象类型。 – Steve 2012-05-25 14:25:52

0

您只需调用UIView.IsFirstResponder你想知道,如果它是第一个响应者的看法。

3
if(![myTextField isFirstResponder]) 
{ 
    // do stuff 
} 
1

我可以做这样的

添加属性的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 
相关问题