在警报级别窗口中具有自定义 inputView 的 UIControl

Posted

技术标签:

【中文标题】在警报级别窗口中具有自定义 inputView 的 UIControl【英文标题】:UIControl with A Custom inputView in an Alert Level Window 【发布时间】:2013-07-19 20:40:26 【问题描述】:

我有一个自定义警报视图,它出现在自己的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 是什么?

谢谢!

【问题讨论】:

【参考方案1】:

正如经常发生的那样,我在发布后不久就想通了......

正如mach_msg_trap 指令所暗示的,这是一个线程问题,与日期选择器控件的实现无关。

我在别处修复了一些 NSLock 对象,这似乎解决了问题。

【讨论】:

以上是关于在警报级别窗口中具有自定义 inputView 的 UIControl的主要内容,如果未能解决你的问题,请参考以下文章

自定义 inputView 在模态演示期间未正确设置动画

自定义警报/弹出窗口并持有 JS 引擎

ios添加自定义inputView

IOS10 - 在自定义 inputView 中使用 CollectionView

UISearchBar 的自定义 InputView 在 iOS7 中不起作用

适用于iPhone X的自定义键盘inputView.frame大小