これは、この問題のフォローアップのようなものです: becomeFirstResponder がアプリを遅くする
そのポスターと同じ問題が発生しています。つまり、becomeFirstResponder を呼び出すと、アプリの速度が低下するようです (おそらく 1 ~ 2 秒間ハングします)。ただし、彼らはアラートの表示と組み合わせて呼び出していましたが、非表示のビューを再表示して、最初のレスポンダーとして特定のフィールドで表示しようとしているだけです。何かのようなもの:
[self.dialogView setHidden:NO];
[self.dialogText becomeFirstResponder];
dialogView には、dialogText (ファーストレスポンダーとして設定しようとしている UITextField) とその他の項目を含む階層があります。
この遅さは、このコードが最初に実行されたとき、つまり、このダイアログを初めて開こうとしたときにのみ現れます。その後の試みでは、明らかな遅さはありません (これは、dialogText がその時点ですでにファーストレスポンダーになっているためだと思います。resignFirstResponder をどこにも使用していませんか?)
編集:ここにコンテキスト用の追加コードがありますが、実際にこれ以上光を当てるかどうかはわかりません. このダイアログ ビューの再表示をアニメーション化していますが、動作に違いはありません。また、becomeFirstResponder 呼び出しを完了ブロック (ここのコードには反映されていません) に移動して、少なくともダイアログの表示が遅れないようにしましたが、ダイアログの表示とキーボードの表示の間にはまだ遅延があります。
- (IBAction)showEditDialog:(id)sender
{
[UIView animateWithDuration:0.3f animations:^() {
self.maskView.alpha = 0.8;
self.editDialogView.alpha = 1.0;
} completion:^(BOOL finished) {
if (finished) {
}
}];
[self.editDialogText becomeFirstResponder];
}