XCode IDEでは、MainStoryboardエディターのビューコントローラーの下部に、First ResponderとExitの2つのボックスがあります。
FirstResponderがプログラム的にコード内で何であるかを知っていますが、ストーリーボードエディターでは、それによって役立つことを何も実行できないようです。
この領域の最初のレスポンダーを使用して、なんとかしてビューの最初のレスポンダーを設定できますか?ロード時に最初のテキストフィールドをアクティブにしたいのですが、右クリックしてドラッグしても何も起こりません。私はそれをviewDidLoadメソッドでプログラムで設定できることを知っていますが、ここでそれを行う方法はありますか?
そして、緑の出口は何ですか?
私はこれを使用したことはなく、おそらく使用することはありませんが、UIからイベントを受信するためにオブジェクトを最初にインラインで割り当てることができます。
UIViewサブクラスを作成してUIViewControllerに追加することもできますが、実際には、追加するUIViewController以外のオブジェクトを受け取ってイベントを処理する必要があります。
この質問に対する良い答えはないので、私は私の答えを投稿しています:
ここ から:
注:おそらくFirst Responderをあまり使用しないでしょう。これは、任意の時点でファーストレスポンダステータスを持つオブジェクトを参照するプロキシオブジェクトです。それはあなたのペン先にもあり、おそらくあなたもそれを使う必要はなかったでしょう。例として、Touch Up InsideイベントをボタンからFirst Responderのcut:セレクターに接続できます。ある時点でテキストフィールドに入力フォーカスがある場合は、そのボタンを押して、最初のレスポンダーとなったテキストフィールドをテキストをペーストボードにカットできます。
編集:
1)First Responderは、キーボード通知でテキストフィールドを使用している場合に非常に役立ちます。私はそれを使用してキーボードを非表示にし、クラスの変数currentFirstResponderへのアウトレットを作成し、viewWillDisappearで:
[self.currentFirstResponder resignFirstResponder];
2)アンワインドセグエ(「終了」ボックス)について読むことができます ここ
First Responder:First Responderアイコンは、ユーザーが現在操作しているオブジェクトを表します。ユーザーがiOSアプリケーションを操作すると、複数のオブジェクトが、ユーザーが作成したさまざまなジェスチャーやキーストロークに応答する可能性があります。ファーストレスポンダは、現在制御され、ユーザーと対話しているオブジェクトです。たとえば、ユーザーが入力しているテキストフィールドは、ユーザーが別のフィールドまたはコントロールに移動するまで最初のレスポンダーになります。
Exit:[Exit]アイコンは、マルチシーンアプリケーションでのみ機能する非常に特定の目的を果たします。ユーザーを一連の画面間で移動するアプリを作成している場合、Exitアイコンは、前の画面に戻る視覚的な手段を提供します。 1つのシーンから別のシーンにリンクする5つのシーンを作成し、5番目のシーンから最初のシーンにすばやく戻る場合は、5番目のシーンから最初のシーンの終了アイコンにリンクします。
詳細 ここ
これはあまり見られません。削除された回答は実際に正しいので、そのコメント(削除に影響している可能性が高い)は完全に間違っています。私はそれを改善しようとします。
通常、ボタンに接続するIBAction
は、ボタンを含むビューコントローラにあります。ただし、IBAction
が別のコントローラーにある場合、次に、親コントローラーをボタンからFirst Responderオブジェクトにドラッグすると、親コントローラーでIBAction
を選択できます。
隠された答えが述べるように、これがどのように実装されるかは、アクションがnilに送信されることです。これは、次のように、アクションを検索するレスポンダーチェーン(つまり、ビュー階層)に影響します。
[UIApplication.sharedApplication sendAction:@selector(nextObject:) to:nil from:self forEvent:nil];
例はカスタムUITableViewCell
です。セルにUIButton
を追加しますが、UITableViewController
への埋め込みセグエを持つビューコントローラーにアクションを移動させます。タッチアップではなくアクションをファーストレスポンダにドラッグし、コンテナビューコントローラでアクションを選択します。 indexPathを見つけるアクションでは、単にvisibleCellsをループし、送信者がisDescendantOfView
かどうかを確認します。
- (IBAction)cellButtonTapped:(id)sender{
for(UITableViewCell *cell in self.tableViewController.tableView.visibleCells){
if([sender isDescendantOfView:cell]){
NSIndexPath *indexPath = [self.tableViewController.tableView indexPathForCell:cell];
NSLog(@"tapped %@", indexPath);
}
}
}
別の例としては、再読み込みボタンがあります。最初のビューコントローラーにIBAction
を使用してダウンロードしたアイテムを表示し、最新のデータを取得するために再読み込みします。次に、子コントローラーに詳細を表示しますが、それらもできるようにしたいとします。詳細内からメインアイテムを再読み込みするには、詳細にボタンを追加し、そのアクションをFirst Responderにドラッグして、親コントローラーでreload IBAction
を選択します。これにより、デリゲートメソッドのような追加のコードなしでボタンを親アクションにフックできます。
これが機能するためには、アクションがレスポンダーチェーン階層にある必要があります。そうでない場合、アクションは見つかりません。チェーンがどのように構築されているかをドキュメントで確認できます。また、コードから呼び出された場合、ビューが表示されている必要があります。viewWillAppear
は早すぎます。