UITextField
プロトタイプセル内にタグが付いています。が構築され、上のセルの a がオンになっている場合、 はファーストレスUITextField
ポンダーになるように設定されています。これは、アプリを最初から起動した場合、またはアプリを閉じて再起動した場合に機能します。ロードされると、はトリガーされなくなります。UITableView
UISwitch
[tableView reloadData]
becomeFirstResponder
UITextField
後でテキストフィールドに触れてファーストレスポンダーになった場合、ボタンやポップアップなどでイベントをトリガーできますbecomeFirstResponder
...しかし、スイッチではできなくなりました。
私が試すことができるものについての指針はありますか?
現在、didSelectRowAtIndexPath
メソッドを使用してポップアップをトリガーしています。良い副作用は、数字キーパッドをプルアップすると、キーパッドの個別のボタンをいじる代わりに、ポップアップ内に [OK] ボタンと [キャンセル] ボタンを提供できることです。しかし、それは明らかに回避策のようです。
これは、ビルド時に firstresponder を呼び出す方法ですUITableView
(アプリがゼロから起動するたびに機能します)。
if ([settings doubleForKey:@"limitDouble"]==0 && [settings boolForKey:@"limitBool"]==YES) {
[dailyLimitEntry becomeFirstResponder];
}
DailyLimitEntry はUITextField
強力なため、そのまま残ります。
楽しみのために、ボタンを追加して、次のようにコードに接続しました。
UITextField *tmp = (UITextField *)[self.view viewWithTag:35];
[tmp becomeFirstResponder];
これも機能します。スイッチで使用すると、アプリがメモリに新たにロードされたときにのみ呼び出されます。そうUITextField
しないと、スイッチに応答しません。
UITableView
最初のコメントの後、リロードが完了したかどうかを確認する方法を見つけました
-(void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
if([indexPath row] == ((NSIndexPath*)[[settingsTableView indexPathsForVisibleRows] lastObject]).row){
//end of loading
//for example [activityIndicator stopAnimating];
NSLog(@"finished reload");
NSLog(@"%@",dailyLimitEntry);
if ([settings boolForKey:@"limitBool"]==YES) {
UITextField *tmp = (UITextField *)[self.view viewWithTag:35];
[tmp becomeFirstResponder];
}
}
}
楽しいことですが、ファーストレスポンダーになるのは、アプリが読み込まれた後に最初にスイッチが使用されたときにのみトリガーされます. 最初は、スイッチはオフです。そのため、 を含むセルUITextField
はまだ描画されていません。に切り替えるとON
、UITextField
が 2 番目のセルに描画され、ファーストレスポンダになります。もう一度切り替えOFF
ても、ログに「リロード完了」が表示されますが、最初の応答者にはなりません。それは私を夢中にさせています....アプリのライフサイクルに関する何かに違いありません。ON
UITextField