2013-03-22 7 views
17

के लिए UIAppearance प्रॉपर्टी को ओवरराइड करें मैं अपने ऐप में UINavigationBar ऑब्जेक्ट्स की पृष्ठभूमि छवि सेट करने के लिए UIAppearance प्रोटोकॉल का उपयोग कर रहा हूं।MFMailComposeViewController

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"image-name"] forBarMetrics:UIBarMetricsDefault]; 

मैं इतना है कि डिफ़ॉल्ट शैली नेविगेशन पट्टी प्रदर्शित किया जाता है MFMailComposeViewController की घटनाओं के लिए रूप से ओवरराइड करना चाहते हैं। मैं appearanceWhenContainedIn उपयोग करने के लिए इस सेट करने का प्रयास किया और मुझे एक त्रुटि बनाने या वहाँ एक बेहतर तरीका यह पूरा करने के लिए है हूँ यह नहीं आईओएस 6.

[[UINavigationBar appearanceWhenContainedIn:[MFMailComposeViewController class], nil] setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault]; 

पर iOS 5 लेकिन पर काम करता है?

+0

को एप्पल डेवलपर समर्थन अनुसार: iOS 7.0 में एक ज्ञात बग है। – jasonjwwilliams

+1

यह आईओएस 9 – Climbatize

उत्तर

23

सामान्य उपायों के माध्यम से एक MFMailComposer का रूप बदलना संभव नहीं है, लेकिन वहाँ एक छोटे से वैकल्पिक हल आप कर सकते हैं, जो मैं कई बार उपयोग किया है है पहले। ,

- (void)applyComposerInterfaceApperance 
{ 
    [[UINavigationBar appearance] setTintColor:[UIColor blueColor]]; 
} 

- (void)applyGlobalInterfaceAppearance 
{ 
    // My default color of choice 
    [[UINavigationBar appearance] setTintColor:[UIColor redColor]]; 
} 

अब अपने शो विधि में विशेष संगीतकार इंटरफ़ेस परिवर्तन करना चाहते हैं लागू होते हैं:

वर्ग है जिसमें आप करने के लिए नया रूप को लागू करना चाहते हैं के लिए दो विधियां जोड़ें।

- (void)showMailComposer 
{ 
    if ([MFMailComposeViewController canSendMail]) 
    { 
     [self applyComposerInterfaceApperance]; 

     MFMailComposeViewController *viewController = [[MFMailComposeViewController alloc] init]; 
     viewController.mailComposeDelegate = delegate; 
     [viewController setToRecipients:mailRecepients]; 
     [viewController setSubject:mailSubject]; 
     [viewController setMessageBody:messageBody isHTML:NO]; 
     [self presentModalViewController:viewController animated:YES]; 
    } 
} 

और अपने प्रतिनिधि में, इंटरफ़ेस को उस तरीके से वापस बदलें।

- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error 
{ 
    // Do normal mail composer did finish stuff in here 
    [self applyGlobalInterfaceAppearance]; 
} 
+0

मैं अपने स्वयं के ऐप्स में भी यही करता हूं। मेरे पास मेरे ऐप प्रतिनिधि में सेट अप्परपेरेंस और अनसेट अपरिपूर्णता विधियों की एक जोड़ी है, जब भी मुझे मानक प्रीबैक व्यू कंट्रोलर (मेल नियंत्रक, आईपॉड लाइब्रेरी पिकर इत्यादि) पेश करने की आवश्यकता होती है, तो मैं अपने सभी UI अनुकूलन को चालू और बंद करने के लिए कहीं भी कॉल कर सकता हूं। – Ziconic

+2

@ ज़िकोनिक, क्या आप कृपया मुझे बता सकते हैं कि कैसे आप फ्लाई पर अपनी यूप्पीरेंस गुणों को "अनसेट" करते हैं? धन्यवाद – Pavan

2

मेल संगीतकार दृश्य आईओएस 6 के तहत एक अलग प्रक्रिया में चलाया जाता है और सीधे छेड़छाड़ नहीं किया जा सकता है (क्योंकि दृश्य अनिवार्य रूप से किसी अन्य ऐप के अंदर है)। आप जो भी दिखाते हैं उसे अनुकूलित नहीं कर सकते हैं, यह ट्विटर & फेसबुक दृश्यों के लिए समान है।

यहाँ दूरदराज के दृश्य नियंत्रकों की एक अधिक विस्तृत विवरण है: http://oleb.net/blog/2012/10/remote-view-controllers-in-ios-6/

+3

में तय किया गया है, भले ही यह एक दूरस्थ प्रक्रिया में चलाया गया हो, यह एक कार्यान्वयन विवरण है जो डेवलपर के संपर्क में नहीं है; जहां तक ​​डेवलपर का संबंध है, यह पहले जैसा दिखता है। अगर मैं काम नहीं कर रहा हूं तो मैं एक बग फाइल करने का सुझाव दूंगा; मुझे पता है कि रिमोट व्यू कंट्रोलर तंत्र कम से कम * कुछ * यूआईपीपेरेंस तंत्र के साथ करता है, क्योंकि मेरे पास क्रैश लॉग डाउन है। :) –

+0

मुख्य दृश्य वास्तव में एक अलग प्रक्रिया में है लेकिन नेविगेशन बार और नेविगेशन नियंत्रक यह आपके ऐप के समान प्रक्रिया में हैं और आपके यूआईपीपीरेंस अनुकूलन के अनुसार स्टाइल किए गए हैं। – Ziconic

+0

@ बीजेहोमर मैंने एक रडार दायर किया। नकल करने के लिए स्वतंत्र महसूस करें। rdar: // 13490724 – markdorison

1

सीधे शब्दों में MFMailComposeViewController उदाहरण पर tintColor सेट:

[mailInstance.navigationBar setTintColor:[UIColor someColor]]; 
संबंधित मुद्दे