4

これは、この問題のフォローアップのようなものです: 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];
}
4

1 に答える 1

2

まず、ビューの切り替えを行っていますか?(例:view1(非表示)-> view2(再表示))

別のビューにdialogText(テキストフィールドだと思いますか?)がある場合は、次のことをお勧めします。

[self.view bringSubviewToFront:view2];

最初

ビューがどのように割り当てられているか、textViewまたはtextFieldがどこにあるかを見ずに、何が遅くなるかを推測するのは困難です。

于 2012-10-17T22:07:05.730 に答える