2012-05-08 25 views
6

पर नेविगेशन नियंत्रक में बैक बटन की पृष्ठभूमि को बदलता है मैंने पृष्ठभूमि छवि के साथ नेविगेशन नियंत्रक शीर्षक पट्टी को अनुकूलित किया है, लेकिन मैं वास्तव में बैक बटन के पृष्ठभूमि रंग को पारदर्शी में बदलने के लिए संघर्ष कर रहा हूं ताकि यह मेल खा सके इसके नीचे हरा शीर्षक पट्टी। मैं आईओएस विकास के लिए बिल्कुल नया हूँ। क्या कोई सुझाव दे सकता है कि क्या किया जा सकता है?आईओएस 5 पारदर्शी

यहाँ, कोड के लिए मैं नेविगेशन नियंत्रक की शीर्षक पट्टी को बदलने के लिए प्रयोग किया जाता है सिर्फ मामले में यह मदद करता है:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    if ([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)]) { 
     UIImage *image = [UIImage imageNamed:@"greenbar.png"]; 
     [self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault]; 
     // [[UIBarButtonItem appearance] setBackButtonBackgroundImage:image forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

    } 

    //change back button image 

} 

संपादित: अनुसंधान के एक बिट करने के बाद मैं मैं चाहता था पाने में कामयाब रहे । यहाँ वापस बटन के लिए पृष्ठभूमि छवि बदलने के कोड है:

UIImage *image1 = [UIImage imageNamed:@"back-bt.png"]; 
    [[UIBarButtonItem appearance] setBackButtonBackgroundImage:image1 forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

ऊपर कोड नेविगेशन नियंत्रक के सभी वापस बटन करने के लिए छवि कहते हैं।

+0

आपका समाधान तब काम नहीं करेगा जब नेविगेशन नियंत्रक को पॉपओवर नियंत्रक में प्रस्तुत किया जाता है। इसका कारण यह है कि पॉपओवर में नेविगेशन बार की पृष्ठभूमि और बैक बार बटन आइटम की पृष्ठभूमि अलग-अलग खींची जाती है। –

उत्तर

5

आप डिफ़ॉल्ट बैक बटन की उपस्थिति को नहीं बदल सकते हैं, लेकिन आप इसे बदलने के लिए अपना स्वयं का बटन बना सकते हैं।

- (void)viewDidLoad { 

    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    if ([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)]) { 
     UIImage *image = [UIImage imageNamed:@"greenbar.png"]; 
     [self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault]; 
     // [[UIBarButtonItem appearance] setBackButtonBackgroundImage:image forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

    } 

    //change back button image 
    if(self.navigationController.viewControllers.count > 1) { 
     UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom]; 

     [backButton setTitle:@"Back" forState:UIControlStateNormal]; 
     [backButton addTarget:self action:@selector(didTapBackButton:) forControlEvents:UIControlEventTouchUpInside]; 
     backButton.frame = CGRectMake(0.0f, 0.0f, 64.0f, 41.0f); 
     UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButton]; 

     self.navigationItem.leftBarButtonItem = backButtonItem; 
    } 
} 



- (void) didTapBackButton:(id)sender { 
    if(self.navigationController.viewControllers.count > 1) { 
     [self.navigationController popViewControllerAnimated:YES]; 
    } 
} 
+0

उत्तर के लिए धन्यवाद! यह काम कर रहा है, लेकिन केवल एक स्तर के लिए गहराई के लिए और हर दृश्य के लिए नहीं। लेकिन क्या कोई अन्य तरीका अंतर्निहित नहीं है? धन्यवाद! –

+3

कोई अन्य तरीका जो मुझे पता है। यदि आप इसे अपने सभी व्यू कंट्रोलर में शामिल करना चाहते हैं तो 'बेस व्यू कंट्रोलर' क्लास बनाएं जो इसे 'viewDidLoad' विधि पर लागू करता है और ऐप में आपके सभी व्यू कंट्रोलर के लिए इसे बेस क्लास के रूप में उपयोग करता है। '[सुपर व्यूडिडलोड]' को कॉल करने के लिए अपने मुख्य दृश्य नियंत्रकों में viewDidLoad ओवरराइड करते समय सावधान रहें। – adig

+0

धन्यवाद adig! यह उपयोगी है! –