2012-01-07 10 views
3

UITextFieldが現在の最初のレスポンダーであることを知りたいと思っています。Objective Cのfirstresponderを取得

ユーザーが特定のUITextFieldをクリックすると、ブール値が設定されます。だから私は、この特定のテキストフィールドが最初の応答者になったかどうかを知ることができる必要があります。

私は最初のレスポンダを設定する方法を知っていますが、実際にフィールドが最初のレスポンダになったかどうかを判断する方法はわかりません。

答えて

24

[...]しかし、フィールドが実際に ファーストレスポンダになったかどうかを確認する方法がわかりません。

UIViewはあなたにこれを伝えるUIResponderからisFirstResponderメソッドを継承します。

ファーストレスポンダは、個々のコントロール/ビューを確認せず、可能な第一応答者の異なるタイプのすべてのための複数の方法なしには何でも見つけるための最も簡単な方法は、単にfindFirstResponderメソッドを追加しますUIViewのカテゴリを作ることです。

の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

によってFirstResponderオブジェクトを取得する可能性がありますか? – zakdances

+3

@yourfriendzak UITextFieldは、最初のレスポンダになることができる唯一の種類のオブジェクトではないためです。 – Steve

4

なぜUITextFieldDelegateを使用せず、textFieldDidBeginEditing:メソッドを実装しますか?これは、テキストフィールドがフォーカスを得るとすぐに呼び出されます。

UITextFieldDelegate Protocol Reference

0

あなたはあなたはそれが最初の応答者かどうかを知りたいビューにUIView.IsFirstResponderを呼び出すことができます。

3
if(![myTextField isFirstResponder]) 
{ 
    // do stuff 
} 
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; 

} 

を実装最後に、私はなぜそれがするUITextFieldのUIViewを返していません

self.firstRespondField 
関連する問題