在Objective C中获得第一响应者

时间:2012-01-07 19:38:21

标签: iphone objective-c cocoa-touch macos cocoa

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

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

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

5 个答案:

答案 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:方法?只要文本字段获得焦点,就会调用此方法。

UITextFieldDelegate Protocol Reference

答案 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。