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
}
}