我有一个自定义提醒视图,该视图显示在自己的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?
谢谢!
答案 0 :(得分:0)
经常发生这种情况,我在发布后不久就明白了......
正如mach_msg_trap
指令提示的那样,这是一个线程问题,与日期选择器控件的实现无关。
我在其他地方修复了一些NSLock
个对象,这似乎解决了这个问题。