プロパティが に設定されたUIWindow
状態で独自に表示されるカスタム アラート ビューがあります。アラートには、通常のキーボードを備えたテキスト フィールドと、を として返すカスタム サブクラスがあります。windowLevel
UIWindowLevelAlert
UIControl
UIDatePicker
inputView
コントロールがファーストレスポンダになるのに応答してシステムが日付ピッカーを提示すると、日付ピッカーがアラート ビューの背後に表示されます。これに対する私の解決策は、コントロールのピッカーのウィンドウのウィンドウレベルを調整することでした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 とは何ですか?
ありがとう!