2016-01-04 4 views
12

मैं इस तरह एक UIAlertViewController को लागू करना चाहते हैंUITlertCiewroller के साथ UITlertController को कस्टमाइज़ करने के लिए या पेज एप में इस यूआई की तरह कोई डिफ़ॉल्ट नियंत्रण उपलब्ध है? (: पेज और मुख्य वक्ता के रूप एप्लिकेशन संदर्भ):

enter image description here

मैंने कस्टम टेबलव्यू लागू किया है और UIAlertViewController की नकल करके दृश्य प्रस्तुत किया है। लेकिन मैं उपरोक्त के समान यूआई प्राप्त नहीं कर सकता। क्या इसके लिए कोई डिफ़ॉल्ट नियंत्रक उपलब्ध है?

-(void)share:(id)sender 
{ 
    [self setModalPresentationStyle:UIModalPresentationCurrentContext]; 

    AlertViewController *renameCntrl = [self.storyboard instantiateViewControllerWithIdentifier:AlertTblViewidentifier]; 
    renameCntrl.optionViewDelegate = self; 
    renameCntrl.providesPresentationContextTransitionStyle = YES; 
    renameCntrl.definesPresentationContext = YES; 
    [renameCntrl setModalPresentationStyle:UIModalPresentationOverCurrentContext]; 
    [self presentViewController:renameCntrl animated:YES completion:nil]; 
} 
+0

वैसे भी uialertviewcontroller से uitableview पॉप करने के लिए है। – SMS

+0

आप इस कार्यक्षमता को केवल UITableView के माध्यम से प्राप्त करना चाहते हैं .. – Ricky

+0

मेरा उत्तर देखें। मैंने इसे कई बार लागू किया है, और यह बहुत आसान है। –

उत्तर

5

UIAlertController में निजी contentViewController संपत्ति है जो आपको चेतावनी नियंत्रक के हिस्से के रूप में UIViewController सबक्लास सेट करने की अनुमति देती है। यह दोनों एक्शन शीट या अलर्ट शैलियों के साथ अच्छी तरह से काम करता है। आप सामग्री दृश्य नियंत्रक को अन्य चेतावनी कार्यों के साथ मिश्रित कर सकते हैं।

यह UIActivityViewController, एयरड्रॉप पूर्वावलोकन नियंत्रक इत्यादि लागू किया गया है।

सर्वश्रेष्ठ अभ्यास UIAlertController, और में या तो initWithNibName:bundle: या viewDidLoad उपवर्ग, setValue:forKey: का उपयोग contentViewController गुण सेट करने के लिए है। अपने सामग्री दृश्य नियंत्रक के लिए preferredContentSize सेट करना न भूलें।

+4

"सर्वश्रेष्ठ अभ्यास 'UIAlertController' को सब्सक्राइज़ करना है" ... ओह, नहीं। दस्तावेज़ों से: "UIAlertController क्लास का उपयोग इस तरह किया जाना है और सबक्लासिंग का समर्थन नहीं करता है।" – Firo

+0

@ फ़िरो हम यहां निजी एपीआई के बारे में बात कर रहे हैं। मैं प्रमाणित कर सकता हूं कि यह अच्छी तरह से काम करता है। –

+4

मुझे कोई संदेह नहीं है कि यह काम करता है। बस इसे "सर्वश्रेष्ठ अभ्यास" पर विचार नहीं करेंगे। मुझे ओपी के निजी एपीआई के बारे में बात करने का कोई संदर्भ नहीं दिख रहा है, यह सब कुछ है। – Firo

0

मुझे लगता है कि आप UIAlertControllerStyleActionSheet करने के लिए एक preferredStyle सेट के साथ UIAlertController उपयोग करना चाहिए।

लेकिन यदि यह स्क्रैच से पर्याप्त प्रारंभ नहीं है, तो UIWindow औरसे तालिका दृश्य के साथ और कोई यूआई जो आप चाहते हैं, वहां बहुत सी कस्टम अलर्ट देखें, कार्यान्वयन देखें मुझे यकीन है कि आपको आसानी से उदाहरण मिल गया है।

+0

UIAlertcontroller, दाईं ओर छवियों के साथ इसे अनुकूलित करने का कोई तरीका है, मैंने पहले से ही UIAlertcontroller को आजमाया है लेकिन एक ही आवश्यकता को प्राप्त नहीं कर सका। कृपया मुझे कुछ नमूना कोड साझा करें, अगर यह मेरी मदद कर सकता है। – SMS

1

लियो जवाब देने के लिए पर जोड़ने, हाँ, वहाँ UIAlertControllercontentViewController पर एक निजी प्रॉपर्टी में आप एक UIViewControllerUIAlertController की सामग्री के रूप में (और यह है दृश्य) स्थापित करने के लिए अनुमति देता है।

आप KVO का उपयोग कर या तो जैसे एक निजी हैडर आयात किए बिना इस संपत्ति का उपयोग करने के लिए एक निजी इंटरफ़ेस बना सकते हैं: फिर

@interface UIAlertController (ContentViewController) 
@property (nonatomic, strong) UIViewController * contentViewController; 
@end 

, में अपने कस्टम दृश्य लेआउट अपनी सामग्री को देखने नियंत्रक के view, इंटरफ़ेस बिल्डर या प्रोग्राम के रूप में के माध्यम से ।

याद रखें कि आप भी अपने दृश्य नियंत्रक के preferredContentSize ओवरराइड करने के लिए की जरूरत है:, बल्कि गेटर अधिभावी से, सिंह नतन preferredContentSize सीधे स्थापित करने का सुझाव के बाद से यह UIViewController पर एक संपत्ति है:

- (CGSize)preferredContentSize { 
    CGSize contentSize = [super preferredContentSize]; //gets the preferredContentHeight from the view, will be set depending on how much content we have 
    return CGSizeMake(contentSize.width, self.view.preferredContentHeight); 
} 

नोट।

यदि आप चाहें तो अपने उप-वर्ग में भी अपने व्यू कंट्रोलर के view को ओवरराइड कर सकते हैं।

के रूप में अपने अलर्ट सेट कर अपने सामान्य:

UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Title" message:@"Message" 
                        preferredStyle:UIAlertControllerStyleActionSheet]; 

अपने कस्टम दृश्य सेट करें:

[alertController setContentViewController:[[MyContentViewController alloc] init]]; 

अपने कार्यों जोड़ें:

[alertController addAction:[UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^{ 
         NSLog(@"Cancel Button was pressed"); 
}]; 

के रूप में अपने सामान्य वर्तमान:

[self presentViewController:alertController animated:YES completion:nil]; 

UIAlertController के निजी एपीआई पर अधिक जानकारी आईफोन देव विकी के article on UIAlertController पर मिल सकती है।

मैं _UIAlertControllerActionView और UIAlertAction, साथ ही साथ UIAlertActionViewRepresentation_Internal प्रोटोकॉल पर निजी इंटरफेस भी देखता हूं।

+0

'पसंदीदा सामग्री आकार' को ओवरराइड न करें। यह एक संपत्ति है, इसे सेट करें। –

+0

@LeoNatan को 'UIViewController' पर' readonly' के रूप में घोषित 'पसंदीदा सामग्री' नहीं घोषित किया गया है? – JAL

+0

हू? '@property (nonatomic) CGSize पसंदीदा सामग्री ' –

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