2013-10-16 5 views
12

मैं वर्तमान में UIAppearance संशोधक * का एक जटिल वेब कताई कर रहा हूं, और एक समस्या में आया है।UIAppearance की "जब नहीं है"

FlatUIKit के कस्टम UIBarButton उपस्थिति प्रोटोकॉल का मेरा उपयोग शिकायत करने और काम रोकने के लिए MFMailComposerViewController का कारण बन रहा है।

इसलिए, UIAppearance की whenContainedIn पद्धति को संशोधित करने वाले वर्ग निर्दिष्ट करने के लिए विधि का उपयोग करने के बजाय, क्या कुछ वर्गों को बाहर करने का कोई तरीका है, यानी "जब इसमें शामिल नहीं है"?

* मैं UIAppearance प्रोटोकॉल के बारे में बात कर रहा हूं जिसका उपयोग ऐप के प्रतिनिधि में ऑब्जेक्ट उपस्थिति सेटिंग्स को पूर्वनिर्धारित करने के लिए किया जाता है।

उत्तर

14

आप शून्य संशोधन, जो डिफ़ॉल्ट उपस्थिति दे देंगे निर्दिष्ट करने के लिए appearanceWhenContainedIn: उपयोग कर सकते हैं:

[[UIBarButton appearance] setBarTintColor:[UIColor redColor]]; 
[[UIBarButton appearanceWhenContainedIn:[MFMailComposerViewController class], nil] setBarTintColor:nil]; 

का आईओएस 9 एसडीके के रूप में, वहाँ भी

[[UIBarButton appearance] setBarTintColor:[UIColor redColor]]; 
[[UIBarButton appearanceWhenContainedInInstancesOfClasses:@[[MFMailComposerViewController class]] setBarTintColor:nil]; 

कौन सा Swift- इस्तेमाल किया जा सकता 2 इस तरह:

UIBarButton.appearance().barTintColor = UIColor.redColor() 
UIBarButton.appearanceWhenContainedInInstancesOfClasses([MFMailComposerViewController.self]).barTintColor = nil 
0

मेरे लिए मैंने इस एक का उपयोग किया ज आईओएस 10 में काम करता है,

[[UITextField appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]] setTextColor:[UIColor darkGrayColor]]; 
0

मेरे समाधान सभी कंटेनर दृश्य नियंत्रक कि मुख्य UIWindow subviews (खिड़की के रूट दृश्य नियंत्रक या प्रस्तुत दृश्य नियंत्रक) के रूप में अनुप्रयोग में इस्तेमाल किया जा रहा का एक कस्टम उपवर्ग बनाने के लिए है, जैसे UINavigationController, UITabBarController या UISplitViewController

मान लें कि ऐप केवल UINavigationController का उपयोग कर रहा है। एक उपवर्ग बनाएँ:

class CustomizedNavigationController: UINavigationController {} 

तो अनुप्रयोग में हर जगह सादे UINavigationController की CustomizedNavigationController बजाय का उपयोग करें।

UIBarButtonItem.appearance(whenContainedInInstancesOf: 
          [CustomizedNavigationController.self]) 

क्योंकि MFMailComposerViewController उपवर्ग का उपयोग नहीं कर रहा है, यह अनुकूलित नहीं किया जाएगा:

इसके अलावा, बजाय हर UIBarButton के लिए उपस्थिति को निर्दिष्ट करने की, उपस्थिति केवल जब उपवर्ग में निहित निर्दिष्ट करें।

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