5

UIAlertControllerを上に並べて表示UIViewControllerしたいUICollectionView。コレクション ビューは起動に集中する必要があるため、preferredFocusableView次のように変数をオーバーライドしました。

override var preferredFocusedView: UIView? {
    return self.collectionView
}

tvOS 9 では、すべて問題なく動作しました。アラート コントローラが適切に開き、UIAlertAction表示された s のいずれかを選択できました。

tvOS 10 Golden Master で、アラート コントローラーを開いて別のアクションにスクロールした後、フォーカスが画面から消え、他のアクションにスクロールしたり、Siri Remote のメニュー ボタンをタップしたりできません。アプリがアラート コントローラーでスタックしたままになり、他のアクションにスクロールしようとするとスクロール音が聞こえますが、画面には何も起こりません。アプリを強制終了して、再度開く必要があります。

ここに画像の説明を入力 ここに画像の説明を入力

アプリのコードです。コレクションビューのフォーカスメソッドをに設定preferredFocusableViewしたり、削除したりしようとしましたが、結果はありませんでした。alertController.preferredFocusedView

var alertController : UIAlertController?

func showAlert() {

    alertController = UIAlertController(title:"Example title", message: "Example description", preferredStyle: .Alert)

    let action1 = UIAlertAction(title: "Option 1", style: .Default) { (action : UIAlertAction) -> Void in
        //call to another method
    }

    // action2, action3, action4...

    let action5 = UIAlertAction(title: "Option 5", style: .Default) { (action : UIAlertAction) -> Void in
        //call to another method
    }

    let actionDismiss = UIAlertAction(title: "Dismiss", style: .Destructive) { (action : UIAlertAction) -> Void in
        self.alertController!.dismissViewControllerAnimated(true, completion: nil)
    }

    alertController!.addAction(action1)
    alertController!.addAction(action2)
    alertController!.addAction(action3)
    alertController!.addAction(action4)
    alertController!.addAction(action5)
    alertController!.addAction(actionDismiss)

    alertController!.preferredAction = action1

    self.presentViewController(alertController!, animated: true, completion: nil)
}

override var preferredFocusedView: UIView? {
    if self.alertController != nil {
        return self.alertController!.preferredFocusedView
    } else {
        return self.collectionView
    }
}
4

2 に答える 2