2009-02-02 20 views
18

मुझे एक UINavigationController मिला है और मैंने इंटरफ़ेस बिल्डर में नेविगेशन बार की टिंट प्रॉपर्टी का उपयोग करके इसे सफेद में बदल दिया है। लेकिन बटन और शीर्षक में पाठ अभी भी डिफ़ॉल्ट रंग, सफेद है, और इसलिए सफेद पृष्ठभूमि के खिलाफ खो जाता है। किसी को पता है कि इस के आसपास कैसे काम करना है?UINavigationBar बटन आइटम पर टेक्स्ट रंग कैसे बदलें

उत्तर

31

iOS 5 के रूप में यह यह बहुत आसान है, UIBarButtonItem उपस्थिति प्रॉक्सी का प्रयोग:

NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys: 
         [UIColor blackColor], 
         UITextAttributeTextColor, 
         [UIColor clearColor], 
         UITextAttributeTextShadowColor, nil]; 

[[UIBarButtonItem appearance] setTitleTextAttributes: attributes 
              forState: UIControlStateNormal]; 

इसे एप्लिकेशन में सेट करें: didFinishLaunchingWithOptions:

+1

यह व्यक्तिगत UIBarButtonItem (ओं) पर भी लागू किया जा सकता है। बार के वास्तविक बटन के लिए आप लिख सकते हैं: [बटन setTitleTextAttributes: टेक्स्ट एट्रिब्यूट्स के लिए स्टेटस: UIControlStateNormal]; –

1

क्या आप जागरूकता में बटन खोजने के लिए UINavigationBar दृश्य की सामग्री को पुन: सक्रिय नहीं कर सकते?

[[theNavigationBar.subviews objectAtIndex:1] setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; 
[[theNavigationBar.subviews objectAtIndex:2] setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; 

हालांकि, विशाल, चेतावनी:

+0

आप कर सकते हैं। लेकिन मैं एक setTextColor कर रहा हूँ: forStates: मेरे बटन पर और यह अनदेखा प्रतीत होता है। यद्यपि दृढ़ रहेंगे। इसके अलावा निजी एपीआई (या यूआई की संरचना के कम से कम निजी अनुमानित ज्ञान) पर सीमाएं भी उपयोग करती हैं। – schwa

+0

ओह मैं इसे वापस लेता हूं - यह काम करता है। फॉलो अप उत्तर देखें ... – schwa

+0

मैंने इस तरह के अन्य विचारों के अंदर देखा है। हालांकि यह थोड़ा निजी एपीआई-आईएसएच है, लेकिन कम से कम कोई धारणा नहीं होती है: यदि आंतरिक बदलते हैं, तो आपका कोड उस स्थिति का पता नहीं लगाएगा जिसे आप खोज रहे हैं। लेकिन मैंने अभी तक UINavigationBar नहीं किया है। –

8

यहाँ एक तरीका है। भविष्य में ओएस रिलीज को तोड़ने की अत्यधिक संभावना है और इसकी अनुशंसा नहीं की जाती है।

कम से कम आपको बहुत से परीक्षण करना चाहिए और सुनिश्चित करें कि नेविगेशन बार के सबव्यू लेआउट की आपकी धारणाएं सही हैं।

+1

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

+0

सही। मैंने इसे करने का वास्तविक तरीका पोस्ट नहीं किया। काम करने वाली पहली विधि। रक्षात्मक प्रोग्रामिंग ftw। – schwa

+0

कितना मजाकिया है कि मुझे लगभग दो महीने का जवाब नहीं मिलता है, और फिर मुझे उनकी पूरी फसल मिलती है ... वैसे भी, मैंने इसे एक जवाब दिया क्योंकि यह सबसे स्केलेबल है, भले ही मैं कस्टम का उपयोग कर समाप्त हुआ बटन छवियों। उम्मीद है कि कुछ इसे आधिकारिक एपीआई में v3.0 द्वारा बनाता है। – lawrence

2

या आप एक सेटर आपके द्वारा निर्दिष्ट के साथ अपने स्वयं बटन बार आइटम उपवर्ग का उपयोग करें, lus iPhone OS 3 हर बटन

2

रूप drunknbass सुझाव दिया मैंने किया था के लिए पाठ रंग का पर्दाफाश करने लगता नहीं है। मैंने कुछ राज्यों में बैक-बटन के लिए छवियों की एक श्रृंखला बनाने और कुछ राज्यों में नियमित बटन बनाने का प्रयास किया, और उचित शैलियों को स्थापित करने के लिए उन्हें एक कस्टम UIButton उपclass में रखा।

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

संबंधित नोट पर, यदि आप अपने नेविगेशन बार के रंग रंग को बदलते हैं, तो यह टैब बार के क्रम को अनुकूलित करने के लिए विशेष "अधिक" दृश्य नियंत्रक के साथ अच्छा नहीं खेलता है। उस दृश्य में टूलबार के रंग को बदलने के लिए कोई "स्वीकार्य" तरीका प्रतीत नहीं होता है।

+0

यह एक भी एनवी बार के लिए एक अच्छा समाधान है। लेकिन जैसा कि आपने स्वीकार किया है कि यह बिल्कुल ठीक नहीं है। मैं शायद सामान्य रूप से इस तरह के समाधान का उपयोग करता हूं। लेकिन मैं एक ऐप पर काम कर रहा हूं जिसमें बहुत गतिशील यूई आवश्यकताएं हैं। मुझे कुछ और हैकी करने के लिए मजबूर होना पड़ सकता है :-( – schwa

0

यहाँ साफ रास्ता (सार्वजनिक एपीआई पर निर्भर) इस IMHO करें: यदि आप इसे लागू करने के लिए navigationItem की titleView संपत्ति का उपयोग करना चाहिए अपने स्वयं के UILabel जिस पर आप textColor

 
 
UILabel* lbl = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 20)]; 
lbl.textAlignment=UITextAlignmentCenter; 
lbl.backgroundColor=[UIColor clearColor]; 
lbl.textColor=[UIColor colorWithRed:0.18 green:0.2 blue:0.56 alpha:1]; 
theControllerOnWhichYouWantToHaveATitleWithYourOwnColor.navigationItem.titleView=lbl; 
[lbl release]; 
 

+0

यह नेविगेशन आइटम के बाएं और दाएं बटन के रंग को प्रभावित नहीं करता है। – lawrence

+0

-1! :) ठीक है यह उदाहरण के लिए बैक बटन को हल नहीं करता है, लेकिन यह हल करता है मुख्य शीर्षक दृश्य के लिए मुद्दा। उसी दृष्टिकोण को उसी बटन पर लागू किया जा सकता है जिस पर आप कस्टम व्यू भी सेट कर सकते हैं। फिर मैं मानता हूं कि आपको सही पृष्ठभूमि छवि के साथ सही दृश्य बनाना है और इसी तरह, लेकिन यह "व्यवहार्य" है, और सार्वजनिक एपीआई के साथ। – yonel

+0

बेशक यदि आप किसी दूसरे प्रश्न का उत्तर देते हैं तो आप नीचे आ जाएंगे। आपका उत्तर इस प्रश्न के लिए ठीक होगा: http://stackoverflow.com/questions/599405/iphone-navigation-bar-title-text-color –

11
for (id subView in theNavigationBar.subviews) { 
    if ([subView isKindOfClass:[UIButton class]]) { 
     [(UIButton *)subView setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 
     [(UIButton *)subView setTitleShadowColor:[UIColor clearColor] forState:UIControlStateNormal]; 
    } 

} 
अनुकूलित करेंगे
-1

आप नेविगेशन बार में लेबल जोड़कर शीर्षक उपस्थिति को बदल सकते हैं।

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 35)]; 
label.backgroundColor = [UIColor clearColor]; 
label.textAlignment = UITextAlignmentCenter; 
label.textColor =[UIColor whiteColor]; 
label.text=self.title; 
self.navigationItem.titleView = viewLabel; 
[label release]; 
संबंधित मुद्दे