2014-09-17 12 views
17

जैसे मानक तत्व शामिल करने के लिए मुझे को [alert setValue:someView forKey:@"accessoryView"] विधि के माध्यम से अनुकूलित करने के लिए उपयोग किया जाता है। यह कस्टम ऊंचाई के साथ UIAlertViews के लिए अनुकूलन योग्य सामग्री बनाता है। हालांकि यह केवल आईओएस 7 और नीचे काम करता है। आईओएस 8 में UIAlertController ले लिया गया है, और अब मैं इसे कस्टमाइज़ नहीं कर सकता, यह UIAlertView की ऊंचाई को काट देगा।आईओएस 8 में UIAlertController को अनुकूलित करने के लिए UITableView

UIAlertController का दुरुपयोग करने के कारण यह असंभव है, या मुझे यह कैसे करना चाहिए? मैं UIAlertControllerStyleAlert के साथ एक UIAlertController के अंदर एक UITableView को शामिल करने का प्रयास कर रहा हूं।

Thx।

+0

मैं बजाय https://github.com/wimagguc/ios-custom-alertview इस लाइब्रेरी का उपयोग कर समाप्त हो गया है, और UIAlertController को छोड़ दिया। – kbjeppesen

उत्तर

33

मैं अभी एक ही मुद्दे में भाग गया। मैं UIAlertController के लिए निजी हैडर (https://github.com/nst/iOS-Runtime-Headers/blob/master/Frameworks/UIKit.framework/UIAlertController.h) को देखा और एक होनहार संपत्ति पाया: contentViewController

और यह रूप में accessoryView UIAlertView, अंतर किया जा रहा है कि आप करने के लिए एक UIViewController सौंपने होंगे के लिए हुआ करता था निकला बिल्कुल वैसा ही होना करने के लिए UIView के बजाय यह संपत्ति।

UIViewController *v = [[UIViewController alloc] init]; 
v.view.backgroundColor = [UIColor redColor]; 

[alertController setValue:v forKey:@"contentViewController"]; 

कोड का वह टुकड़ा अलर्ट व्यू पर लाल दृश्य दिखाएगा! हैप्पी UIAlertController अनुकूलन;)

पीएस। यह एक निजी संपत्ति है लेकिन केवीसी का उपयोग करने में कोई समस्या नहीं होनी चाहिए, मुझे लगता है कि ऐप स्टोर के अनुसार, मुझे लगता है।

संपादित करें:

कुछ लोगों ने शिकायत की कि यह बहुत ही सुरक्षित नहीं है। यह एक सार्वजनिक एपीआई नहीं है, इसलिए हाँ, ऐप्पल इसे किसी भी रिलीज में बदल सकता है, जिससे यह विधि विफल हो जाती है।

यह सुनिश्चित करने के लिए कि यदि आपका होता है तो आपका पूरा ऐप क्रैश नहीं होता है, तो आप try ब्लॉक में केवीसी कॉल को लपेट सकते हैं। संपत्ति में परिवर्तन अपने नियंत्रक सामग्री दृश्य वह दिखाई नहीं देगा, लेकिन यह भी दुर्घटना नहीं:

@try { 
    [alertController setValue:v forKey:@"contentViewController"]; 
} 
@catch(NSException *exception) { 
    NSLog(@"Failed setting content view controller: %@", exception); 
} 

उत्पादन में इस विधि का उपयोग जोखिम भरा हो सकता है, और मैं महत्वपूर्ण अलर्ट के लिए यह सलाह नहीं देते।

+0

इस विधि का उपयोग कर आप चेतावनी नियंत्रक की ऊंचाई को कैसे समायोजित कर सकते हैं? – kbjeppesen

+1

आप 'कंटेंट व्यूंट्रोलर' के रूप में सेट करने वाले व्यू कंट्रोलर में एक कस्टम आकार वापस करने के लिए '-preferredContentSize' को ओवरराइड कर सकते हैं। – JonasG

+0

क्या कोई यह पुष्टि कर सकता है कि इसे ऐप स्टोर द्वारा स्वीकार कर लिया गया है? –

2

मुझे लगता है कि आप आसानी से आवश्यक नियंत्रण जोड़कर UIView को अनुकूलित कर सकते हैं और इसे सामान्य रूप से प्रस्तुत कर सकते हैं, जब तक कि आपके पास केवल UIAlertController का उपयोग करने का कोई अन्य विशिष्ट कारण न हो।

https://www.cocoacontrols.com/search?q=UIAlertview

10

मैं सुझाव देता हूं कि आपके बर्बाद समय को उस जगह पर अतिरिक्त UI को क्रैक करने का प्रयास न करें जहां ऐसा नहीं होना चाहिए। सुधार के पिछले कुछ वर्षों के आधार पर, ऐप्पल शायद अगले आईओएस में कस्टम व्यू जोड़ देगा। तब तक, किसी भी सर्वोत्तम प्रथाओं को कम किए बिना इस सटीक स्थिति को संभालने के लिए डिज़ाइन किए गए ढांचे पर एक नज़र डालें: SDCAlertView

यह अलर्ट का समर्थन करता है जो आईओएस 7,8,9 पर मूल अलर्ट का अनुकरण करता है, जिसमें सभी गंदे किनारे के मामलों को संभालने सहित आकार, बटन प्रकार, रोटेशन इत्यादि के आसपास। यह चेतावनी के भीतर मनमाने ढंग से कस्टम विचारों का समर्थन करता है।

SDCAlertView demo gif

मैं कस्टम पुश अधिसूचना संकेतों कि वास्तव में आईओएस देशी की तरह लग रही के लिए याहू YMPromptKit में इस लाइब्रेरी का उपयोग करें।यहाँ एक और उदाहरण है:

enter image description here

0

तुम मेरे UIAlertController श्रेणी का उपयोग कर कोड की लाइन का सिर्फ एक एक के साथ यह कर और आवेदन में मौजूदा अलर्ट की जगह ले सकता है, यह here की जाँच करें।

enter image description here

+0

से एक अनुकूलन नियंत्रक को पकड़ूंगा जो कि बहुत अच्छा होता, लेकिन दुर्भाग्यवश यह आईपैड पर एक्शन शीट के साथ काम नहीं करता है। –

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