iOS 7 UIBarButton बैक बटन एरो कलर


172

मैं बैक बटन एरो को बदलने की कोशिश कर रहा हूं

यहां छवि विवरण दर्ज करें

मैं वर्तमान में पाठ के आकार के साथ-साथ पीछे के बटन पर पाठ के रंग को नियंत्रित करने के लिए निम्नलिखित का उपयोग कर रहा हूं:

[[UIBarButtonItem appearance] setTitleTextAttributes:
  [NSDictionary dictionaryWithObjectsAndKeys:
    [UIColor whiteColor], UITextAttributeTextColor,
    [UIFont boldSystemFontOfSize:16.0f], UITextAttributeFont,
    [UIColor darkGrayColor], UITextAttributeTextShadowColor,
    [NSValue valueWithCGSize:CGSizeMake(0.0, -1.0)], UITextAttributeTextShadowOffset,
  nil] forState:UIControlStateNormal];

लेकिन अगर मैं बैक बटन के लिए केवल तीर का रंग बदलना चाहता हूं, तो मुझे क्या करना चाहिए?


क्या आपको बैक बटन के लिए एरो का रंग बदलने का कोई समाधान मिला है?
ओंकारके

1
@OMK मैंने काम करने के लिए अपनी infolistproperty NavBarColor को बदलना समाप्त कर दिया और फिर वास्तविक navbarcolor को एक अलग रंग में सेट कर दिया। मुझे यकीन नहीं है कि क्या चल रहा था, लेकिन उस समाधान ने मेरे लिए काम किया
किविनल

1
कुछ गुणों का व्यवहार UINavigationBariOS 7 से बदल गया है। कुछ अन्य गुणों के प्रभाव को देखने के लिए उत्तर पर एक नज़र डालें ।
भावन

कृपया इस समस्या में सहायता करें: stackoverflow.com/questions/29923813/…
MIloš Kresović

जवाबों:


438

एक विशिष्ट नेविगेशन कंट्रोलर के लिए बैक बटन शेवरॉन कलर बदलने के लिए *:

self.navigationController.navigationBar.tintColor = [UIColor whiteColor];

* यदि आप 1 से अधिक नेविगेशन नियंत्रक के साथ एक ऐप का उपयोग कर रहे हैं, और आप चाहते हैं कि यह शेवरॉन रंग प्रत्येक पर लागू हो, तो आप प्रत्येक नेविगेशन नियंत्रक के लिए बैक बटन शेवरॉन सेट करने के लिए उपस्थिति प्रॉक्सी का उपयोग करना चाह सकते हैं:

[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];

और अच्छे उपाय के लिए, स्विफ्ट (टिप्पणियों में जे मेयू के लिए धन्यवाद):

UINavigationBar.appearance().tintColor = UIColor.whiteColor()

3
यह केवल पूरे ऐप पर लागू होगा यदि आप अपने संपूर्ण ऐप के लिए एक ही नेविगेशन नियंत्रक का उपयोग कर रहे हैं। मैं वास्तव में बार्ट के सुझाव की सिफारिश करता हूं।
काइल क्लेग

1
मैंने कई नेविगेशन नियंत्रकों के बारे में एक नोट के साथ अपना उत्तर अपडेट किया। मैं अभी भी इस बात से सहमत नहीं हूं कि बार्ट का सुझाव "सही" उत्तर है, क्योंकि जब आप पूरे ऐप का टिंट रंग सेट करते हैं तो बहुत सारे अन्य दुष्प्रभाव होते हैं। साथ ही, मूल प्रश्न ने यह नहीं पूछा कि पूरे ऐप को कैसे थीम दें, यह केवल यह पूछ रहा था कि बैक बटन को कैसे थीम दिया जाए।
दिसदेव

1
यह पीछे के शेवरॉन के रंग को सेट करने के लिए प्रतीत नहीं होता है।
jcampbell1

2
@ jcampbell1 - मैं अपने कई ऐप में सफलतापूर्वक इसका उपयोग कर रहा हूं ... शायद आपने कई यूएनेविज़नकंट्रोलर्स के बारे में कैविटी नहीं पढ़ी।
२२

7
तेज के लिएUINavigationBar.appearance().tintColor = UIColor.whiteColor()
Jay Mayu

57

आपको पूरे ऐप का tintColor सेट करना होगा।

self.window.tintColor = [UIColor redColor];

या स्विफ्ट 3 में:

self.window?.tintColor = UIColor.blue

स्रोत: iOS 7 UI ट्रांज़िशन गाइड


4
यदि आप केवल बैक बटन शेवरॉन का रंग सेट करना चाहते हैं (और संपूर्ण ऐप नहीं), जैसा कि मूल प्रश्न में कहा गया है, तो यह गलत उत्तर है। सही उत्तर के लिए यहां मेरा जवाब देखें: stackoverflow.com/a/18809412/1103584
DiscDev

मैंने अपने बैक बटन को ब्लैक में बदलने के लिए अपने ऐप डेलीगेट में इसका इस्तेमाल किया। ApplicationDidFinishLaunchingWithOptions विधि में जगह ... window.tintColor = [UIColor ब्लैकबोर्डर];
मार्क वॉटसन

यह iOS 6 पर काम नहीं कर सकता। किसी को पता है कि क्या करना है?
गावजार

1
इसके कारण यह पूरे ऐप के tintColor को प्रभावित करता है, जिसमें कोई भी UIActivityViewController (साझा करने के लिए) और MFMailComposeViewController (ईमेल भेजने के लिए) शामिल है। उन संवादों का मानना ​​है कि tintColor को संशोधित नहीं किया गया है .... और इसके परिणामस्वरूप कुछ बदसूरत रंग बातचीत हो सकती है।
माइक लैंबर्ट

यह कई अन्य वस्तुओं के रंग को बदलता है, जैसे कि ब्लिंकिंग कर्सर UITextField। निश्चित रूप से अनुशंसित नहीं है।
हंटर भिक्षु

55

आप विधि का उपयोग करके पूरे ऐप के नेविगेशन बार पर रंग सेट कर सकते हैं

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:
(NSDictionary *)launchOptions{
    [[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
}

23

इस तरह से केवल तीर का रंग (बैक बटन शीर्षक का रंग नहीं) बदलना संभव है:

[[self.navigationController.navigationBar.subviews lastObject] setTintColor:[UIColor blackColor]];

नेविगेशन बार में _UINavigationBarBackIndicatorView प्रकार (सबव्यू सरणी में अंतिम आइटम) का सबव्यू होता है जो तीर का प्रतिनिधित्व करता है।

रिजल्ट बैक बटन एरो और बैक बटन टाइटल के विभिन्न रंगों के साथ नेविगेशन बार है


4
सिस्टम विचारों के साक्षात्कार के आदेश के आधार पर एक बुरा विचार है।
ग्लेन मेनार्ड

2
यह काम किया, जब self.navigationController.navigationBar.tintCint पर काम नहीं किया।
रिच फॉक्स

@GlennMaynard आप सही हैं- इसे लागू करने का सबसे अच्छा तरीका यह होगा कि self.navigationController.navigationBar.subviewsजब तक बैक बटन न मिल जाए, तब तक दिए गए इंटरव्यू के एरे के माध्यम से पुनरावृति करें।
इवान आर

@EvanR, जबकि सेल्मड के समाधान ने मेरे लिए काम किया, साक्षात्कार की सरणी के माध्यम से पुनरावृत्ति नहीं हुई (जो मैंने पहले कोशिश की क्योंकि मैं आपसे सहमत हूं कि ऐसा करना बुद्धिमान होगा)। यदि यह आपके लिए काम करता है- तो कृपया एक उदाहरण जोड़ें। धन्यवाद।
जंगलेदेव

22

यदि आप स्टोरीबोर्ड का उपयोग कर रहे हैं तो आप नेविगेशन बार टिंट रंग सेट कर सकते हैं।

यहां छवि विवरण दर्ज करें

यहां छवि विवरण दर्ज करें


ठीक वही जो मेरे द्वारा खोजा जा रहा था। धन्यवाद!
चाड लुईस

11

RootViewController के अंदर, जो नैविगेशनकंट्रोलर को इनिशियलाइज़ करता है, मैंने इस कोड को अपने viewDidAppear मेथड के अंदर डाला:

//set back button color
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor], UITextAttributeTextColor,nil] forState:UIControlStateNormal];
//set back button arrow color
[self.navigationController.navigationBar setTintColor:[UIColor whiteColor]];

2
UITextAttributeTextColor को iOS 7 में चित्रित किया गया है
NSForegroundColorAttributeName

7

IOS 6 में, tintColor ने नेविगेशन बार, टैब बार, टूलबार, सर्च बार और स्कोप बार की पृष्ठभूमि को टिंट किया। IOS 7 में बार बैकग्राउंड को टिंट करने के लिए, इसके बजाय barTintColor प्रॉपर्टी का उपयोग करें।

iOS 7 डिज़ाइन संसाधन iOS 7 UI ट्रांज़िशन गाइड


2
यही तो है वो! ... इसे ऐप प्रतिनिधि में रखें। एक जादू की तरह काम करता है! window.tintColor = [UIColor blackColor]; // मैं काला चाहता था
मार्क वाटसन

6

आप tintColorसंपत्ति को बटन (या बार बटन आइटम) या दृश्य नियंत्रक के दृश्य पर सेट कर सकते हैं। डिफ़ॉल्ट रूप से, संपत्ति को पैरेंट दृश्य से टिंट विरासत में मिलेगा, UIWindowआपके ऐप के शीर्ष स्तर तक सभी तरह से ।


1
जवाब देने के लिए धन्यवाद। हालाँकि, यह iOS 7 पर कुछ अलग तरह से काम करता है। मेरा पुराना कोड tintColor का उपयोग कर रहा था, लेकिन iOS 7 को यह सब इतना पसंद नहीं है। मैं कुछ यूआई मुद्दों को ठीक करने के लिए आधिकारिक Apple देव iOS 7 संक्रमण गाइड का उपयोग कर समाप्त हुआ
kevinl

यह करने के लिए असतत उदाहरण के लिए मेरा जवाब देखें: stackoverflow.com/a/18809412/1103584
DiscDev

5

मुझे दोनों का उपयोग करना था:

[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] 
                     setTitleTextAttributes:[NSDictionary 
               dictionaryWithObjectsAndKeys:[UIColor whiteColor], UITextAttributeTextColor,nil] 
                                   forState:UIControlStateNormal];

[[self.navigationController.navigationBar.subviews lastObject] setTintColor:[UIColor whiteColor]];

और मेरे लिए काम करता है, आप सभी के लिए धन्यवाद!


5
UINavigationBar *nbar = self.navigationController.navigationBar;

if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) {
   //iOS 7
   nbar.barTintColor = [UIColor blueColor]; // bar color
   //or custom color 
   //[UIColor colorWithRed:19.0/255.0 green:86.0/255.0 blue:138.0/255.0 alpha:1];

   nbar.navigationBar.translucent = NO;

   nbar.tintColor = [UIColor blueColor]; //bar button item color

} else {
   //ios 4,5,6
   nbar.tintColor = [UIColor whiteColor];
   //or custom color
   //[UIColor colorWithRed:19.0/255.0 green:86.0/255.0 blue:138.0/255.0 alpha:1];

}

महान। इसने मेरी मदद की। धन्यवाद
योगेश Lolusare

4

अद्यतन स्विफ्ट 3

navigationController?.navigationItem.rightBarButtonItem?.tintColor = UIColor.yellow
navigationController?.navigationBar.tintColor = UIColor.red
navigationController?.navigationBar.barTintColor = UIColor.gray
navigationController?.navigationBar.titleTextAttributes =  [NSForegroundColorAttributeName: UIColor.blue]

परिणाम: यहां छवि विवरण दर्ज करें


3

बस NavigationBarरंग बदलने के लिए आप नीचे जैसा टिंट रंग सेट कर सकते हैं।

[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];

यह iOS 7 में टिंट रंग को प्रभावित नहीं करेगा। डॉक्स के अनुसार: "उपस्थिति प्रॉक्सी API का उपयोग करके टिंटकलर संपत्ति सेट करना iOS 7 में समर्थित नहीं है।" लिंक
बाछोंक

3

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

@interface UIImage (TintColor)

- (UIImage *)imageWithOverlayColor:(UIColor *)color;

@end


@implementation UIImage (TintColor)

- (UIImage *)imageWithOverlayColor:(UIColor *)color
{
    CGRect rect = CGRectMake(0.0f, 0.0f, self.size.width, self.size.height);

    if (UIGraphicsBeginImageContextWithOptions) {
        CGFloat imageScale = 1.0f;
        if ([self respondsToSelector:@selector(scale)])
            imageScale = self.scale;
        UIGraphicsBeginImageContextWithOptions(self.size, NO, imageScale);
    }
    else {
        UIGraphicsBeginImageContext(self.size);
    }

    [self drawInRect:rect];

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetBlendMode(context, kCGBlendModeSourceIn);

    CGContextSetFillColorWithColor(context, color.CGColor);
    CGContextFillRect(context, rect);

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return image;
}

@end




#import "iOS7backButton.h"

@implementation iOS7BackButton

-(void)awakeFromNib
{
    [super awakeFromNib];

    BOOL is6=([[[UIDevice currentDevice] systemVersion] floatValue] <7);
    UIImage *backBtnImage = [[UIImage imageNamed:@"backArrow"] imageWithOverlayColor:self.titleLabel.textColor];
    [self setImage:backBtnImage forState:UIControlStateNormal];
    [self setTitleEdgeInsets:UIEdgeInsetsMake(0, 5, 0, 0)];
    [self setImageEdgeInsets:UIEdgeInsetsMake(0, is6?0:-10, 0, 0)];


}


+ (UIButton*) buttonWithTitle:(NSString*)btnTitle andTintColor:(UIColor*)color {
    BOOL is6=([[[UIDevice currentDevice] systemVersion] floatValue] <7);
    UIButton *backBtn=[[UIButton alloc] initWithFrame:CGRectMake(0, 0, 60, 30)];
    UIImage *backBtnImage = [[UIImage imageNamed:@"backArrow"] imageWithOverlayColor:color];
    [backBtn setImage:backBtnImage forState:UIControlStateNormal];
    [backBtn setTitleEdgeInsets:UIEdgeInsetsMake(0, is6?5:-5, 0, 0)];
    [backBtn setImageEdgeInsets:UIEdgeInsetsMake(0, is6?0:-10, 0, 0)];
    [backBtn setTitle:btnTitle forState:UIControlStateNormal];
    [backBtn setTitleColor:color /*#007aff*/ forState:UIControlStateNormal];

    return backBtn;
}

@end

बैक बटन छवि @ 2x


3

यदि आप संपूर्ण एप्लिकेशन पर केवल बैक एरो BUT बदलना चाहते हैं, तो यह करें:

[[NSClassFromString(@"_UINavigationBarBackIndicatorView") appearance] 
  setTintColor:[UIColor colorWithHexString: @"#f00000"]];

एक मौका है कि यह आपको ऐप स्टोर से खारिज कर दिया जाएगा
ल्यूक

@ ल्यूक, मैंने इसे कई बार सफलतापूर्वक उपयोग किया है। कोई अस्वीकार नहीं। लेकिन, हाँ, मौका अभी भी मौजूद है।
orkenstein

यह अभी भी संभावना है कि यह भविष्य के आईओएस संस्करण में टूट जाएगा
लोप

1
@ लोप, हाँ, क्यों नहीं। मैं सिल्वर बुलेट की तलाश में नहीं हूं।
orkenstein

IOS 10.1 पर दिए गए साक्षात्कारों से पता चलता है कि यह अभी भी वर्ग का नाम है, लेकिन इसकी उपस्थिति को निर्धारित करना जैसा कि यहां दिखाया गया है, मेरे लिए कोई प्रभाव नहीं है।
अर्लोमेडिया

2

IOS 7 में, आप application:didFinishLaunchingWithOptions:अपनी AppDelegate.mफ़ाइल में कोड की निम्न पंक्ति रख सकते हैं :

[[UINavigationBar appearance] setTintColor:myColor];

myColorउस रंग पर सेट करें जिसे आप चाहते हैं कि बैक बटन पूरे ऐप में हो। इसे हर फाइल में डालने की जरूरत नहीं है।


0

स्विफ्ट 2.0: कलर नेविगेशन बार और बटन

navigationController?.navigationBar.barTintColor = UIColor.blueColor()
navigationController?.navigationBar.tintColor = UIColor.whiteColor()
navigationController!.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()]

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.