0

プロパティが に設定されたUIWindow状態で独自に表示されるカスタム アラート ビューがあります。アラートには、通常のキーボードを備えたテキスト フィールドと、を として返すカスタム サブクラスがあります。windowLevelUIWindowLevelAlertUIControlUIDatePickerinputView

コントロールがファーストレスポンダになるのに応答してシステムが日付ピッカーを提示すると、日付ピッカーがアラート ビューの背後に表示されます。これに対する私の解決策は、コントロールのピッカーのウィンドウのウィンドウレベルを調整することでしたreloadInputViews:

- (void)reloadInputViews
{
    [super reloadInputViews];
    if (self.datePicker.window.windowLevel < self.window.windowLevel)
    {
        self.datePicker.window.windowLevel = self.window.windowLevel;
    }
}

問題は、テキスト フィールドとカスタム コントロールをすばやく切り替えると、アプリがフリーズすることです (デバッガーを一時停止すると、メイン スレッドが停止していることがわかりますmach_msg_trap)。おそらくウィンドウレベルでのこのトリックだと思いますが、確認できません。

この問題を解決するためのより「正しい」方法はありますか? mach_msg_trap とは何ですか?

ありがとう!

4

1 に答える 1

0

よくあることですが、投稿してすぐに気づきました...

指示が示すmach_msg_trapように、これはスレッドの問題であり、日付ピッカー コントロールの実装とは関係ありません。

問題を解決したように見えるいくつかのNSLockオブジェクトを別の場所で修正しました。

于 2013-07-19T21:30:49.273 に答える