【问题标题】:The handler of a UIAlertAction is a bit too late - how can I make it immediate?UIAlertAction 的处理程序有点太晚了——我怎样才能让它立即生效?
【发布时间】:2016-02-17 03:34:20
【问题描述】:

我正在尝试 (...) 为添加到 UIAlertController 的按钮添加声音效果。我在处理程序中发出声音效果,但这实际上有点太晚了。声音像 0.5 秒一样迟到了。我希望在警报即将解除时立即发出声音,而不是在它解除后。使用 UIAlertView 可以使用 alertWillDismiss... 而不是 alertDidDismiss 来处理。

我错过了什么吗?

【问题讨论】:

  • 如果您认为自己的用例很好,请向 Apple 提交错误报告!
  • 我试图登录到 bugreport.apple.com,但我得到的只是 发生了错误。如需访问 Apple Bug Reporter 的帮助,请联系 Apple 开发者计划支持。 我想我一般都被讨厌了。或者我们所有人都是。
  • 我认为他们没有添加这个功能是因为这个问题:stackoverflow.com/questions/25932589/… - 如果前一个还没有完全关闭,处理程序将无法打开另一个 uialertcontroller -如果使用相同的 uiviewcontroller 打开两个警报。只是我的假设。

标签: ios uialertcontroller uialertaction


【解决方案1】:

不,你没有错过任何东西。 UIAlertController 不提供您正在寻找的功能。考虑提供您自己的呈现视图控制器,您将拥有您所追求的那种精细控制。

【讨论】:

  • 值得注意的是,子类化 UIAlertController 并覆盖 viewWillDisappear 可能很容易,但将来这个类可能会成为最终类
【解决方案2】:

我使用了 Patrick Goley 的建议,即继承 UIAlertController 并覆盖 viewWillDisappear。对我来说效果很好。

//
//  ImmediateClickAlertController.swift
//
//  This subclass of UIAlertController plays a click immediately whenever it is dismissed (i.e. when a button is tapped).
//  This fixes an issue when trying to play a click in an attached UIAlertAction, which does not happen until after its view disappears.

import AudioToolbox

class ImmediateClickAlertController: UIAlertController {

    override func viewWillDisappear(animated: Bool) {
        super.viewWillDisappear(animated)
        // play a click
        let pressKeySystemSoundID: SystemSoundID = 1104
        AudioServicesPlaySystemSound(pressKeySystemSoundID)
    }
}

【讨论】:

    【解决方案3】:

    有点骇人听闻,但也许你可以

    1. 尝试获取对警报按钮的引用(通过遍历 -admittedly private-view 层次结构树),然后
    2. 使用 KVO 检测其selected 和/或highlighted 属性的任何更改(我自己的经验是selected 不能可靠地观察到,而highlighted 是)。

    ...但是所有这些都非常脆弱,不够优雅,可能会在操作系统的未来版本中中断和/或让您被应用商店拒绝...?

    所以你最好的选择(即使最费力)是滚动你自己的模态视图控制器:

    【讨论】:

      猜你喜欢
      • 2018-09-03
      • 1970-01-01
      • 2011-12-20
      • 1970-01-01
      • 2021-05-27
      • 2015-12-23
      • 2016-05-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多