iPhone

2014-09-16 8 views
13

मैं बना रहा हूं और इस प्रकार एक ActionSheet पेश पर पॉपओवर में UIAlertController ActionSheet पेश:iPhone

let alertController = UIAlertController(title: nil, message: nil, preferredStyle: .ActionSheet) 
alertController.modalPresentationStyle = .Popover 

// Add some buttons 

alertController.popoverPresentationController?.delegate = self 
alertController.popoverPresentationController?.barButtonItem = someBarButton 

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

यह आईपैड पर ठीक काम करता है, लेकिन alertController.popoverPresentationControllernil iPhone पर है।

मैं सफलतापूर्वक इंटरफ़ेस बिल्डर में अनुकूली segue शैली पॉपओवर के रूप में उपस्थित का उपयोग करने और adaptivePresentationStyleForPresentationController प्रतिनिधि विधि को लागू करने के लिए सही UIModalPresentationStyle वापस जाने के लिए iPhone पर R आर प्रस्तुत किया है, लेकिन मैं यह कैसे के रूप में UIAlertController साथ कोड में यह करने के लिए अटक कर रहा हूँ आईफोन

+3

नहीं जवाब आप देख रहे हैं, और मैं गलत हो सकता है इस पर, लेकिन मुझे लगता है कि इस लिंक से आपको बाहर मदद मिल सकती है :) यह सिर्फ संभव iPhone पर एक पॉपओवर में एक कार्रवाई शीट दिखाने के लिए नहीं है, आईओएस 8. –

+0

में भी http://stackoverflow.com/a/25656733/3 9 64 9 13 –

+0

दुर्भाग्य से गॉर्डनवर्र्सविक नहीं। मेरे प्रश्न के अनुसार, 'UIAlertController' में आईफोन –

उत्तर

7

UIAlertController पर पॉपअप होने का मतलब नहीं है popoverPresentationController है। टिप्पणियों में इस बारे में कुछ विवाद लगता है। उपरोक्त आपका कोड काम नहीं करेगा अगर यह वास्तव में .Popover शैली का सम्मान कर रहा था। क्यूं कर? क्योंकि इसे sourceView और sourceRect पॉपओवर प्रस्तुति नियंत्रक ऑब्जेक्ट पर सेट करने की आवश्यकता है ताकि तीर को इंगित किया जा सके। यदि आप UIViewController के लिए UIAlertController को स्वैप करते हैं तो यह क्रैश हो जाएगा क्योंकि वे मान सेट नहीं हैं। विडंबना यह है कि अगर आप बल की कोशिश कर popoverPresentationController खोलने यह दुर्घटना होगी:

alertController.modalPresentationStyle = .Popover 
alertController.popoverPresentationController!.sourceView = sender // CRASH!!! 
alertController.popoverPresentationController!.sourceRect = sender.bounds 

कैसे (और सब कुछ लेकिन UIAlertController के लिए) एक iPhone पॉपओवर लागू करने के लिए मेरी iPhone Popover blog post को देखने पर सभी जानकारी के लिए।

तथ्य यह है कि पॉपओवर प्रस्तुति नियंत्रक शून्य है, यह कह रहा है कि इसे पॉपओवर नहीं माना जाता है।

तालिका देखें वैकल्पिक

आप एक प्रतिस्थापन यहाँ के रूप में UITableViewController सोच सकते हैं। समूहबद्ध शैली का उपयोग वास्तव में popovers में बहुत अच्छा लग रहा है।

पिकर

आप फिर से शायद अधिक से अधिक इस समस्या में चलाने के लिए है, जहां आप उपयोगकर्ता बस कुछ ही विकल्पों में से चयन करना चाहते हैं जा रहे हैं। मैं सुझाव दूंगा कि आप जो भी यूजर इंटरफेस नियंत्रण अपने स्वयं के पिकर ऑब्जेक्ट में उपयोग करने जा रहे हैं उसे एन्सेप्लेट करें। कार्यान्वयन विवरण यह है कि क्या यह तालिका दृश्य या बटनों का एक लाइन-अप कॉलिंग कोड से छिपाया जा सकता है और जब आप किसी विशेष अनुक्रमणिका में चयन करते हैं तो आपके पास प्रतिनिधि या बंद कॉलबैक हो सकता है। यहां बताया गया है एपीआई कैसा लग सकता है मोटे तौर पर बताया गया है:

class Picker: UIViewController { 
    init(items: [String]) 
    selectionCompletion: (index: Int, item: String)->Void 
} 

// Usage: 
let picker = Picker(["Answer A","Answer B"]) 
picker.selectionCompletion = { index, item in 
    // handle selection 
} 

इस तरह से आप इसे कहीं भी पुनः उपयोग कर सकते आप चाहें तो और एपीआई बहुत सरल है