2010-10-25 16 views
6

मैं (एक UINavigationController के अंदर) के एक UINavigationBar के लिए एक कस्टम टिंट रंग निर्धारित किया है जो, बारी में, सेट UIBarButtonItems जो UINavigationBar में डाला जाता है के लिए एक उपयुक्त मिलान रंग। हालांकि, जब मैं UIBarButtonItem का चयन करता हूं तो बटन हाइलाइट किए गए राज्य में (संभवतः) बदल जाता है और एक अलग रंग प्रस्तुत करता है, जो काफी थोड़ा सा दिखता है और अच्छी तरह से टिंट रंग से मेल नहीं खाता है। क्या इस हाइलाइट किए गए राज्य रंग को कस्टम रंग में बदलने का कोई तरीका है?UIBarButtonItem हाइलाइट रंग

आदर्श रूप में, मैं सिर्फ UIBarButtonItem जो UIBarButtonItem के सभी उदाहरणों के लिए हाइलाइट किए गए रंग बदल जाता है पर एक वर्ग बनाने के लिए, के रूप में यह स्पष्ट रूप से UIBarButtonItems उपवर्ग और फिर मेरे एप्लिकेशन में हर संदर्भ बदल उपवर्ग का उपयोग करने की जरूरत से बचने होगा चाहते हैं (जो मुश्किल होगा, क्योंकि मैं कुछ तृतीय-पक्ष पुस्तकालयों का उपयोग कर रहा हूं जो केवल UIBarButtonItem का उपयोग करते हैं और मैं उनके कार्यान्वयन के साथ गड़बड़ नहीं करना चाहता)।

किसी भी मदद की सराहना की जाएगी।

उत्तर

0

मुझे इसी तरह के मुद्दे का सामना करने से क्या याद है, यूनाविगेशनबार केवल टिंटकॉलर ले जाएगा और इसे UIBarButtonItem के लिए गहरा कर देगा (जब तक कि शैली BarStyleBlack पर सेट न हो जाए, जिस स्थिति में यह इसे सुस्त ग्रे बनाता है)।

जो भी आप पूछते हैं, करने के लिए, मैं अपनी रंग योजना से मेल खाने वाले विभिन्न नियंत्रण राज्यों के लिए पृष्ठभूमि छवियों के साथ एक कस्टम UIButton बनाउंगा, फिर कस्टम UIBarButtonItem के दृश्य के रूप में इस UIButton का उपयोग करें।

UIButton *customButton = [UIButton buttonWithType:...]; 

//normal_button.png and selected_button.png need to be created by you 
[customButton setBackgroundImage: [UIImage imageNamed:@"normal_button.png"] forState:UIControlStateNormal]; 
[customButton setBackgroundImage: [UIImage imageNamed:@"selected_button.png"] forState:UIControlStateSelected]; 

UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView: customButton]; 

आप कोशिश करते हैं और इस संपुटित चाहते हैं, तो आप हमेशा एक कारखाने या UIBarButtonItem पर एक कस्टम init विधि (एक वर्ग के माध्यम से) बना सकते हैं और इसके बाद के संस्करण कोड (मामूली परिवर्तनों के साथ) इस्तेमाल कर सकते हैं।

मुझे पता है कि मैं एक श्रेणी के साथ नियंत्रण स्थिति को ओवरराइड करने पर आपके दूसरे बिंदु को पूरी तरह से संबोधित नहीं कर रहा हूं। मुझे नहीं पता कि UIBarButtonItem में ऐसी चीज करने के लिए ओवरराइड करने का तरीका क्या है, लेकिन आप यह समझने में सक्षम हो सकते हैं कि आप क्या करना चाहते हैं (http://cocoadev.com/index.pl?MethodSwizzling) के माध्यम से आप जो चाहते हैं उसे पूरा करने में सक्षम हो सकते हैं जिस विधि को आप एक्सचेंज करना चाहते हैं।

मुझे ध्यान रखना चाहिए कि मैंने कभी परीक्षण/डिबगिंग के लिए स्विजलिंग का उपयोग किया है।

+0

फिर आप चयनित राज्य कैसे सेट करते हैं? UIBarButton.selected मौजूद नहीं है? फिर आप UIBarButton के अंदर UIButton तक कैसे पहुंचेंगे? –

+0

दूसरी छवि को यूआईसींट्रोलस्टेट के लिए सेट किया जाना है। हाइलाइट किया गया, नहीं। चयनित –

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