我無法確定哪個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