UITextField
が現在の最初のレスポンダーであることを知りたいと思っています。Objective Cのfirstresponderを取得
ユーザーが特定のUITextField
をクリックすると、ブール値が設定されます。だから私は、この特定のテキストフィールドが最初の応答者になったかどうかを知ることができる必要があります。
私は最初のレスポンダを設定する方法を知っていますが、実際にフィールドが最初のレスポンダになったかどうかを判断する方法はわかりません。
UITextField
が現在の最初のレスポンダーであることを知りたいと思っています。Objective Cのfirstresponderを取得
ユーザーが特定のUITextField
をクリックすると、ブール値が設定されます。だから私は、この特定のテキストフィールドが最初の応答者になったかどうかを知ることができる必要があります。
私は最初のレスポンダを設定する方法を知っていますが、実際にフィールドが最初のレスポンダになったかどうかを判断する方法はわかりません。
[...]しかし、フィールドが実際に ファーストレスポンダになったかどうかを確認する方法がわかりません。
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
なぜUITextFieldDelegateを使用せず、textFieldDidBeginEditing:メソッドを実装しますか?これは、テキストフィールドがフォーカスを得るとすぐに呼び出されます。
あなたはあなたはそれが最初の応答者かどうかを知りたいビューにUIView.IsFirstResponderを呼び出すことができます。
if(![myTextField isFirstResponder])
{
// do stuff
}
私は
このよう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
によってFirstResponderオブジェクトを取得する可能性がありますか? – zakdances
@yourfriendzak UITextFieldは、最初のレスポンダになることができる唯一の種類のオブジェクトではないためです。 – Steve