2012-06-26 27 views
7

मेरे पास मेरे ऐप में UIWebView है, और समस्या यह है कि मेरे पास एक यूआईपीपीरेंस है जो सेगमेंट किए गए नियंत्रणों की उपस्थिति को संशोधित करता है, इसलिए यह इनपुट एक्सेसरी व्यू में सेगमेंटेड कंट्रोल को संशोधित करता है UIWebView टेक्स्टफील्ड के लिए, मैं इसे ठीक से दिखाना चाहता हूं, या इसे संशोधित करने का प्रयास नहीं करना चाहता हूं। [UIAppearance उपस्थिति] के बजाय यह वही है यह वर्तमान की तरह लग रहा है:आईओएस - UIWebView इनपुट एक्सेसरी व्यू को बदलने से UIAppearance सेटिंग्स को रोकें

+0

मुझे यह समस्या है। यह मुझे पागल कर रहा है। – Jarsen

+0

यह UISegmentedControl के लिए उपस्थिति सेटिंग्स प्रतीत नहीं होता है, लेकिन UIToolbar के लिए उपस्थिति, मुझे पूरा यकीन नहीं है, लेकिन मैं अपनी उपस्थिति को हटाए बिना इसे ठीक नहीं कर सकता।ऐसा लगता है कि UIWebView – 8vius

+0

हाँ से टूलबार को निकालने का कोई आसान और सुरक्षित तरीका नहीं है, ऐसा लगता है कि समस्या यह है कि यह खंडित नियंत्रक के अचयनित क्षेत्र के अल्फा को बदल रहा है। मुझे आश्चर्य है कि क्या इसे यूआईटीूलबार के पास पारदर्शिता है। – Jarsen

उत्तर

5

मैं बस का उपयोग करके अपने आप के लिए इस समस्या का समाधान [UIAppearance appearanceWhenContainedIn]।

चयनकर्ता को अपने सभी कस्टम व्यू कंट्रोलर कक्षाओं की एक शून्य-समाप्त सूची भेजकर इसका उपयोग करें जिसमें वे तत्व शामिल हैं जिन्हें आप कस्टमाइज़ करना चाहते हैं। तो

[[UISegmentedControl appearance] setBackgroundImage:buttonBackgroundImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

उपयोग

[[UISegmentedControl appearanceWhenContainedIn:[MyViewController class], [MyOtherViewController class], nil] setBackgroundImage:buttonBackgroundImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

के बजाय आप सभी ViewControllers, बस अपने शीर्ष स्तर के लोगों को सूचीबद्ध करने के लिए जरूरत नहीं है। यह निम्न चाल को भी संभव बनाता है: UIViewController का एक 'खाली' उपclass CustomizedViewController बनाएं जो उप-वर्ग होने के अलावा कुछ और नहीं करता है - और उसके बाद UIViewController से अपने कोड में वहां से उप-वर्ग (मूल रूप से 'UIViewController' के सभी अवसरों को 'CustomizedViewController' के साथ बदलें -। को छोड़कर जहां CustomizedViewController वास्तव में अपनी सुपर क्लास के रूप में UIViewController घोषित

फिर

[[UISegmentedControl appearanceWhenContainedIn:[CustomizedViewController class], nil] setBackgroundImage:buttonBackgroundImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 
+0

मैंने कभी जवाब देने का विश्वास खो दिया था, मैं बाद में एक शॉट दूंगा, स्टीफन। धन्यवाद। – 8vius

+2

दुर्भाग्य से जिस परियोजना पर मैं काम कर रहा हूं, उसमें कोड का उपयोग करके कई टीमों में सैकड़ों कक्षाएं फैली हुई हैं जिन पर मेरा नियंत्रण नहीं है। यूआईपीपेरेंस की सुंदरता यह है कि (सिद्धांत रूप में) मुझे उन कक्षाओं के साथ गड़बड़ नहीं करना है जिन्हें मैं त्वचा की कोशिश कर रहा हूं। मैं हर वर्ग के माध्यम से नहीं जा सकता जिसे मैं त्वचा चाहता हूं और यूआईपीपीरेंस को काम करने के लिए उन्हें एक सामान्य सुपरक्लास देता हूं। शायद अगर सेब में एक उपस्थिति शामिल हो गई थी, तब नहीं, जब मैं UIWebView के भीतर UIToolbars के लिए स्टाइलिंग को कम से कम दबा सकता हूं ... – tyler

+0

मेरे लिए यह काम नहीं करता है ... जब मैंने वेब व्यू के साथ व्यू कंट्रोलर प्रस्तुत किया, तो टूलबार डिफ़ॉल्ट रूप से दिखाई देता था, लेकिन कीबोर्ड टूलबार अनुकूलित – HotJard

2

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

पुन: पुनरावृत्त करने के लिए, जो मैं आईओएस कोड को बता सकता हूं जो कि कीबोर्ड एक्सेसरीज़ बना रहा है, स्पष्ट रूप से यूआईटीूलबार पृष्ठभूमि सेट कर रहा है, इसलिए आपको अपनी यूआईपीपरेंस पृष्ठभूमि सेटिंग नहीं मिलेगी, लेकिन आपको अपना UIBarButtonItem स्टाइल मिल जाएगा। परिणाम आधा स्टाइल दृश्य है, जो बहुत खराब दिख सकता है। सौभाग्य से, मेरे डिजाइनर इस विशेष मामले के लिए डिफ़ॉल्ट स्टाइल पर वापस गिरने के साथ ठीक था।

तो, यह चाल वास्तव में यह पता लगाने के लिए थी कि यूआईपीपीरेंस के माध्यम से स्टाइल नहीं किया जाए। जिस तरह से मैं ऐसा किया इस को बदलने के लिए किया गया था:

id barButtonAppearanceProxy = [UIBarButtonItem appearance]; 
इस के साथ

:

// wtf: Style any UIBarButtonItem associated with a UIViewController 
id barButtonAppearanceProxy = [UIBarButtonItem appearanceWhenContainedIn:[UIViewController class], nil]; 

यह पहली बार में मुझे अजीब लग रहा था क्योंकि मैं एक दृश्य-पदानुक्रम के मामले में रोकथाम के बारे में सोच रहा था ... लेकिन, यह सिर्फ यह कह रहा है कि हम केवल UIBarButtonItems को स्टाइल करेंगे जो UIViewController के साथ जुड़े हुए हैं। कारण यह कुंजीपटल एक्सेसरीज़ को प्रभावित नहीं करता है क्योंकि यह सीधे पैरेंट व्यू की विंडो जोड़ता है और UIViewController से जुड़ा नहीं है।

यह अभी भी आदर्श रूप में एक आदर्श समाधान नहीं है, हम केवल यूआईपीपीरेंस के साथ कीबोर्ड एक्सेसरीज़ को स्टाइल करेंगे। साथ ही, यह मानता है कि आपके सभी टूलबार UIViewControllers से जुड़े हुए हैं। सौभाग्य से मेरे लिए (और शायद आप में से अधिकांश) यह आम तौर पर मामला है।