7

मैं एक कस्टम छवि (पाठ 'वापस' उस छवि में शामिल है) के साथ backBarButtonItem अनुकूलित करने के लिए कोशिश कर रहा हूँ अनुकूलित करना, यहाँ वर्तमान परिणाम है यह हो रहा है?BackBarButtonItem

यहाँ viewDidLoad पर अपने कोड (वास्तव में दोनों माता पिता नियंत्रक पर फिर से नए नियंत्रक वापस बटन है पर चलता है और उसके बाद) है

UIImage *backButtonImage = [UIImage imageNamed:@"Graphics/Shared/navigation_back_button.png"]; 


UIBarButtonItem *backButton = [[UIBarButtonItem alloc] 
           initWithImage:backButtonImage 
           style:UIBarButtonItemStylePlain 
           target:nil 
           action:nil]; 


self.navigationItem.backBarButtonItem = backButton; 

संपादित करें: मैं जिस तरह से iOS का उपयोग कर 5! हो सकता है कि उपस्थिति प्रॉक्सी उपयोग योग्य है लेकिन अब तक जब मैंने बैक बटन स्टफ (ऐपडिलेगेट में) ऐप को सरल क्रैश के लिए उपयोग करने का प्रयास किया था।

+0

उचित उत्तर को स्वीकार करना सुनिश्चित करें! –

उत्तर

16

ठीक है, मैं समस्या हल हो जाती है, एक किसी न किसी तरह चाल का एक सा का उपयोग कर, लेकिन कम से कम यह काम करता है। यदि कोई भी अधिक मानक समाधान के साथ आता है, तो कृपया मुझे बताएं!

UIImage *backButtonImage = [[UIImage imageNamed:@"Graphics/Shared/navigation_back_button.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)]; 
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, backButtonImage.size.height*2) forBarMetrics:UIBarMetricsDefault]; 

यह मेरा AppDelegate की विधि में है:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

यह जब एक पृष्ठभूमि के रूप में उपयोग कर दीर्घकालीन फैलाव रोकने के लिए, मैं iOS 5: How to implement a custom (image) back button

से विचार का उपयोग किया

यहाँ मेरी कोड है लेकिन फिर सेट करने के बजाए इसे tweaked-

self.title = @" "; 

हर दृश्य प्रस्तुत होने पर (और वह भी नेविगेशन बार खिताब के साथ ही गंदगी हो सकता है)

मैं सिर्फ दो बार छवि की ऊंचाई को 'वापस' बटन पाठ के लिए ऑफसेट निर्धारित करते हैं, तो आप इसे कभी नहीं देखेंगे।

दृश्य नियंत्रक को पॉप करने के लिए अपने स्वयं के तरीके के साथ बाएं बटन आइटम का उपयोग करने के बजाय, इस समस्या को क्यों न करें?

मुख्य कारण यह है कि आप दृश्य बदलने के लिए मानक बैक बटन स्लाइडिंग एनीमेशन खो देते हैं। इसके अलावा, इसका मतलब है कि मुझे कस्टम बटन का उपयोग करने या वापस जाने के लिए एक कस्टम विधि लिखने की आवश्यकता नहीं है। यह बस बस काम करता है।

आशा है कि यह किसी और की समस्या को हल करेगी, मुझे पता है कि मैं इसे 3 घंटे के लिए फंस गया था!

+0

का उपयोग और उपयोग करने की क्षमता खो देते हैं, मेरा उत्तर जांचें जो छवि-खींचने और शीर्षक-स्थिति-समायोजन समस्या से बचें। – Gon

0

"UIBarButtonItemStylePlain" पदनाम एक बटन शैली निर्दिष्ट करता है।

बजाय अपनी पीठ बटन इस तरह से बनाने का प्रयास करें:

UIImage *backButtonImage = [UIImage imageNamed:@"Graphics/Shared/navigation_back_button.png"]; 
CGRect frameimg = CGRectMake(0, 0, backButtonImage.size.width, backButtonImage.size.height); 
UIButton *someButton = [[UIButton alloc] initWithFrame:frameimg]; 
[someButton setBackgroundImage:backButtonImage forState:UIControlStateNormal]; 
// you have to do your own backButtonAction to pop the view controller, b.t.w. 
[someButton addTarget:self action:@selector(backButtonAction:) 
    forControlEvents:UIControlEventTouchUpInside]; 
[someButton setShowsTouchWhenHighlighted:YES]; 

UIBarButtonItem *backButton =[[UIBarButtonItem alloc] initWithCustomView:someButton]; 
[someButton release]; 

self.navigationItem.backBarButtonItem = backButton; 
+0

माइकल के प्रयास के लिए धन्यवाद, लेकिन जब मैं आपके कोड का उपयोग करता हूं तो बैक बटन पूरी तरह से सामान्य नीली शैली को बिना किसी अनुकूलन के बदल देता है। (मुझे लगता है कि मैंने पहले से ही इस विधि के समान कई प्रकार की कोशिश की है) मुझे कोड की आपकी 'रिलीज' लाइन से नोटिस है कि मुझे इंगित करना चाहिए कि मैं आईओएस 5 का उपयोग कर रहा हूं! तो यह संभवतः मूल रूप से स्पष्ट नहीं करने के लिए मेरी गलती को बदलता है। –

+4

ऐप्पल के दस्तावेज़ राज्य: ** अपने बार बटन आइटम को कॉन्फ़िगर करते समय, इसे कस्टम दृश्य असाइन न करें; नेविगेशन आइटम बैक बार बटन में कस्टम दृश्यों को अनदेखा करता है। ** –

+1

@AshleyMills काफी सही है। यह उत्तर केवल 'leftBarButtonItem' और 'rightBarButtonItem' के लिए काम करता है, न कि' backBarButtonItem' के लिए। – Gon

0

इस मामले में मैं यह आसान बस एक कस्टम बटन के साथ barButtonItem को बदलने के लिए, मिल गया।

बिल्कुल सही नहीं है कि आपने प्रोजेक्ट को कैसे डिज़ाइन किया है, लेकिन यह मेरे लिए काम करता है।

The setting for the custom button

The back button, resulting look

तो यह करने के लिए इस कोड को देते हैं:

//go back to the previous screen 

-(IBAction)back{ 

[self dismissModalViewControllerAnimated:YES]; 

} 
+1

यह सब अच्छा है लेकिन जब मैं व्यू कंट्रोलर पॉप करता हूं तो मैं मानक स्लाइडिंग एनीमेशन खो देता हूं। यह इस परियोजना के लिए भी होता है मैं इंटरफ़ेस बिल्डर या निब/xib फ़ाइलों का उपयोग नहीं कर रहा हूं। मैं प्रोग्रामेटिक रूप से सब कुछ बना रहा हूँ। –

+0

वास्तव में उनके सवाल का बड़ा नहीं है। आप मानक UINavigationBar –

0

मैंने आज बहुत कोशिश की और यह समाधान मिला। यह पृष्ठभूमि छवि और बटन छवि से अलग हो गया, यह आसान लगता है और मुश्किल नहीं है।

UIImage *bgImage = [UIImage imageNamed:@"the-same-image-as-your-navbar-background-image"]; 
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:bgImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:bgImage forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault]; 

UIImage *buttonImage = [UIImage imageNamed:@"your-back-button-image"]; 
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:buttonImage style:UIBarButtonItemStylePlain target:nil action:nil]; 
self.navigationItem.backBarButtonItem = backButton;