2016-09-09 16 views
5

मैं के ऊपर के साथ के साथ UIAlertController प्रदर्शित करना चाहता हूं। संग्रह को देखने स्टार्टअप पर ध्यान केंद्रित करने की जरूरत है, तो मैं preferredFocusableView चर overrode इस प्रकार है:टीवीओएस पर एक यूआईएलर्ट कंट्रोलर खोलने पर फोकस गायब हो रहा है 10 जीएम

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

tvOS 9 सब के साथ ठीक काम किया: चेतावनी नियंत्रक ठीक से खोला और मैं दिखाया गया UIAlertAction रों से एक का चयन करने में सक्षम था।

टीवीओएस 10 गोल्डन मास्टर पर, अलर्ट कंट्रोलर खोलने और दूसरी कार्रवाई पर स्क्रॉल करने के बाद, स्क्रीन से फोकस गायब हो जाता है और मैं अन्य कार्यों में स्क्रॉल करने या सिरी रिमोट के मेनू बटन पर टैप करने में असमर्थ हूं। ऐप अलर्ट कंट्रोलर में फंस गया है और जब मैं अन्य कार्यों पर स्क्रॉल करने का प्रयास करता हूं तो स्क्रॉलिंग ध्वनि सुन सकता हूं लेकिन स्क्रीन पर कुछ भी नहीं होता है। मुझे ऐप छोड़ने और इसे दोबारा खोलना होगा।

enter image description here enter image description here

इस एप्लिकेशन का कोड है। मैं preferredFocusableViewalertController.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 
    } 
} 
+0

आप 'showAlert' कहां कह रहे हैं? –

+0

@DanielStorm जब उपयोगकर्ता दृश्य नियंत्रक के अंदर एक बटन पर रिमोट के साथ टैप करता है –

+0

पसंदीदा फ़ोकस व्यू को टीवीओएस 10 में हटा दिया गया था https://developer.apple.com/reference/uikit/uifocusenvironment/1616830-preferredfocusedview –

उत्तर

4

एप्पल बस मेरी रडार का जवाब दिया: संलग्न अंदर

आवेदन, आप canBecomeFocused() के लिए true वापस जाने के लिए है, जो का कारण है एक विस्तार में UIScrollView की कार्यक्षमता अधिलेखित कर रहे हैं इन अप्रत्याशित पक्ष प्रभाव। दूसरी UIAlertController विकल्प पर जाने पर फ़ोकस गायब हो रहा है; तथापि, यह वास्तव में, पुस्तक दृश्य के आसपास UIAlertController के विभिन्न घटकों लिपटे करने के लिए ध्यान केंद्रित स्थानांतरित कर रहा है के बाद से यह अब विस्तार ऊपर उल्लेख किया है की वजह से अनुमति दी है।

इस को हल करने के UIScrollView के एक कस्टम उपवर्ग बनाने केवल मामलों में जहां canBecomeFocused()true लौटना चाहिए में प्रयोग की जाने वाली।

1

आप पूरे सिस्टम फोकस इंजन को ओवरराइड कर रहे हैं। इस प्रयास करें:

// MARK: - Update Focus Helper 
var viewToFocus: UIView? = nil { 
    didSet { 
     if viewToFocus != nil { 
      self.setNeedsFocusUpdate() 
      self.updateFocusIfNeeded() 
     } 
    } 
} 

override weak var preferredFocusedView: UIView? { 
    if viewToFocus != nil { 
     return viewToFocus 
    } else { 
     return super.preferredFocusedView 
    } 
} 

तब दृश्य के रूप में अपनी चेतावनी सेट जब आप ध्यान केंद्रित करने के लिए यह बदलना चाहते हैं:

viewToFocus = someView 
+0

अभी भी काम नहीं कर रहा है :(मैं ' मैं UIAlertController की प्रस्तुति के बाद फोकस सेट कर रहा हूं। दो विधियां सही तरीके से काम करती हैं लेकिन फोकस अभी भी गायब हो जाता है। –

संबंधित मुद्दे