我有一个自定义警报视图,它以自己的方式显示,UIWindow
其windowLevel
属性设置为UIWindowLevelAlert
. 警报有一个带有常规键盘的文本字段,以及一个UIControl
返回 aUIDatePicker
作为其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?
谢谢!