3

UIAlertController に追加されたボタンに効果音を追加しようとしています (...)。ハンドラーで効果音を鳴らしますが、実際には少し遅すぎます。音は0.5秒遅すぎるように発射されます。アラートが解除された後ではなく、アラートが解除されようとしているときにすぐにサウンドを鳴らしたい。UIAlertView では、alertDidDismiss ではなく、alertWillDismiss... を使用してこれを処理できました。

私は何か見落としてますか?

4

3 に答える 3

3

いいえ、何も見逃していません。あなたが探している機能は、UIAlertController によって提供されていません。独自の表示されたビュー コントローラーを提供することを検討してください。これにより、必要な種類の細かい制御が可能になります。

于 2016-02-17T03:38:03.610 に答える
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)
    }
}
于 2016-04-23T18:33:25.133 に答える
-1

少しハッカーですが、おそらく次のことができます。

  1. アラートのボタンへの参照を取得してみてください (確かにプライベート ビューの階層ツリーをトラバースすることによって)。
  2. selectedKVO を使用して、そのおよび/またはプロパティの変更を検出しhighlightedます (私の経験では、selected確実に観察できるわけではありませんhighlighted)。

...しかし、これらはすべて非常に壊れやすく、エレガントではなく、OS の将来のリリースで壊れたり、アプリストアから拒否されたりする可能性があります...?

したがって、最良の選択肢は (たとえ最も骨の折れる作業であっても) 独自のモーダル ビュー コントローラーをロールすることです。

于 2016-02-17T03:51:14.063 に答える