0

私はアプリケーションを作成し、、でViewController.mviewDidLoad次のコードを書きました

 for (UIView* v in self.view.subviews){
        NSLog(@"View is %@",v);
        NSLog(@"First Responder is %@",[v isFirstResponder]?@"YES":@"NO");
    }
NSLog(@"First Responder is %@",[self isFirstResponder]?@"YES":@"NO");
NSLog(@"First Responder is %@",[self.view isFirstResponder]?@"YES":@"NO");

しかし、それはNOすべてのために戻ります。デフォルトで私の最初のレスポンダーは何ですか?

4

2 に答える 2

1

メインのビュー コントローラーで、次のようにします。

for (UIView *sub in self.view.subviews)
{
    if (sub.isFirstResponder)
        NSLog(@"It's me!");
}
于 2012-11-12T14:46:36.047 に答える
1

OS X のドキュメントから:

ファーストレスポンダーステータスの決定

通常、NSResponder オブジェクトは、自身のウィンドウ (NSWindow オブジェクトの場合はそれ自体) にファーストレスポンダを問い合わせ、自身とそのオブジェクトを比較することで、自身が現在ファーストレスポンダであるかどうかを常に判断できます。NSWindow オブジェクトに firstResponder メッセージを送信して、ファーストレスポンダを要求します。NSView オブジェクトの場合、この比較は次のコードのようになります。

if ([[self window] firstResponder] == self) {
    // do something based upon first-responder status
}

注:これは OS X 用です。残念ながら、iOS には同様のシステムがありませんが、次の方法で実現できます。

UIWindow* keyWindow = [[UIApplication sharedApplication] keyWindow]; 
UIView* firstResponder = [keyWindow performSelector:@selector(firstResponder)];

これは文書化されておらず、Apple によって拒否される可能性があります。テストや探索的研究の場合、これは便利です。

iOS のファーストレスポンダーに関するドキュメントを次に示します。

于 2012-11-12T14:58:34.330 に答える