2012-05-25 19 views
12

मैं अपने ब्लॉग पर ट्यूटोरियल किया है लागू करने के लिए कैसे, तो मैं कैसे एक खींचे बटन कि नीचे (ढेर) ViewController के शीर्षक प्रदर्शित कर सकते हैं बनाने के लिए जानते हैं। लेकिन मैं जो करने की उम्मीद कर रहा था उसके पास आइकन हैं (होम के लिए घर जैसा) और कोई टेक्स्ट नहीं और आकार बदलना नहीं है।आईओएस 5: एक कस्टम (छवि) वापस बटन

अपने कस्टम छवि का उपयोग करना और नीचे इस कोड, मैं शीर्ष (चाहता था नहीं) से अधिक शीर्षक के साथ एक विस्तारित संस्करण (नहीं चाहता) हो जाते हैं और जब क्लिक यह टिंट/हाइलाइट करता है (अच्छा है);

UIImage *backButtonImage = [UIImage imageNamed:@"backButton_30.png"]; 
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

screen shot 1

अब, मैं यहाँ पर खोज की है और सभी इसी तरह के सवाल जो पुराने जवाब लौटने के लिए, और मेरे लिए अजीब परिणाम हो पढ़ा है। कोड मैंने कोशिश की है;

UIImage *backButtonImage = [UIImage imageNamed:@"backButton_30.png"]; 
    UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:backButtonImage style:UIBarButtonItemStyleBordered target:nil action:nil]; 
    self.navigationItem.backBarButtonItem = backButton; 

इस विधि अपने कस्टम छवि बटन बाहर खिंचाव नहीं करता है (अच्छा है), और न ही यह पाठ (जो मैं चाहता) लेकिन वहाँ अभी भी यह (WTF) के तहत मूल नीला बटन है, और अपने कस्टम दिखाता है बटन क्लिक करते समय टिंट नहीं होता है, इसके नीचे केवल नीला बटन होता है!

screen shot 2

कृपया मदद, मैं क्या याद आ रही है?

* अद्यतन

मैं इसे एक सा एक आकार बदलने योग्य छवि का उपयोग करके ठीक कर दी है। यह यह खिंचाव '

UIImage *backButtonHomeImage = [[UIImage imageNamed:@"backButtonHomeWhite_30.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)]; 
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonHomeImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

के लिए नहीं बलों बटन पर प्रदर्शित शीर्षक ठीक करने के लिए मैं

self.title [email protected]" "; 

अब इस एक गंदा ठीक का एक सा है करना था, लेकिन यह काम कर रहा है । अब एकमात्र समस्या यह है कि मैं अलग-अलग विचारों पर एक अलग बैक बटन चाहता हूं, और यह विधि कुछ परेशानी पैदा कर रही है; अंतिम दृश्य जो बटन को अन्य सभी विचारों से अधिक सवारी करता है। तो अंत में, ऐप के माध्यम से नेविगेट करने के तरीके के आधार पर, पिछले दृश्य पर लौटने से गलत बैक बटन होता है और यह कभी भी सही पर रीसेट नहीं होता है।


अद्यतन 2: संभावित विचार:

निम्नलिखित एक उचित समाधान होगा, या यह एक हैक है कि कुछ को तोड़ने के लिए उत्तरदायी है?

बटन वापस डिफ़ॉल्ट छिपाई जा रही है, की तरह तो,

[self.navigationItem setHidesBackButton:YES animated:NO]; 

... और फिर एक कस्टम UIBarButtonItem का उपयोग कर, शैली मैं वास्तव में वापस बटन के स्थान में रखा चाहते में एक बटन के साथ, कि भेजता है UINavigationController करने के लिए एक popViewControllerAnimated: संदेश जब उपयोग किया।

आप एक और अधिक मजबूत समाधान शेयर कृपया का पता है, धन्यवाद।

+0

क्या आप इसे केवल विशेषता निरीक्षक से नहीं बदल सकते हैं? – nemesis

+0

मेरी इच्छा है कि मुझे पता था कि ... मैंने स्टोरीबोर्ड में पहला व्यू कंट्रोलर चुना है, फिर इंस्पेक्टर इंटरेक्टर के पास गया और मुझे वास्तव में नेविगेशन आइटम के नीचे एक बॉक्स दिखाई देता है जो बैक बटन कहता है, हालांकि मुझे नहीं पता कि इसका उपयोग कैसे किया जाए; मैंने छवि नाम में टाइप करने का प्रयास किया है, लेकिन ऐसा कुछ भी नहीं दिख रहा है। कोई सुझाव? – RobDigital

+0

इसे हल करने के लिए एक और तरीका है - आप नेविगेशन बार में एक सामान्य बटन खींच सकते हैं, और उसके बाद कस्टम छवियों और नामों के साथ खेल सकते हैं .. मुझे उम्मीद है कि इससे आपकी मदद मिलती है! – nemesis

उत्तर

13

यह मानते हुए कि अपने वर्तमान समाधान

UIImage *backButtonHomeImage = [[UIImage imageNamed:@"backButtonHomeWhite_30.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)]; 
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonHomeImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

आप को स्वीकार्य है, इसलिए केवल समस्या छोड़ दिया है कि बटन appeareance अपडेट करने का तरीका है जब आप आगे और पीछे अपने विचारों के बीच जाना, एक दृष्टिकोण है कि निष्पादित हो रहा है काम कर सकता है

- (void)viewWillAppear:(BOOL)animated { 
    UIImage *backButtonHomeImage = [[UIImage imageNamed:@"backButtonHomeWhite_30.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)]; 
    [[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonHomeImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 
} 

आप एक कस्टम UIBarButtonItem होने के लिए अपने वर्तमान दृष्टिकोण से संतुष्ट नहीं हैं, तो जाने का रास्ता साथ अपने बार बटन आइटम आरंभ है: अपने नियंत्रकों 'viewWillAppear: विधि में से प्रत्येक में उपरोक्त कोड initWithCustomView:। इस मामले में, आप निर्दिष्ट कर सकते हैं उदाहरण के लिए, छवि आप की तरह के साथ एक UIImageView और यह काम करना चाहिए:

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithCustomView:[UIImageView ...]]; 

आशा इस मदद करता है।

9

iOS के लिए [[UIBarButtonItem appearance] setBackButtonBackgroundImage:[UIImage imageNamed:@"someimage.png"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault] का उपयोग 5 +।

+0

मूल रूप से पोस्ट किया गया है, यह वही है जो मैंने पहले ही कोशिश की है और मुझे शीर्ष पर शीर्षक (इच्छित नहीं) के साथ एक विस्तारित संस्करण (नहीं चाहता था) मिलता है। – RobDigital

+1

आपकी छवि को ऐप्पल के समान ऊंचाई/चौड़ाई की आवश्यकता है। आप '[[UIImage imageNamed: @ "someimage.png"] resizableImageWithCapInsets का उपयोग करके एक आकार बदलने योग्य छवि भी बनाना चाह सकते हैं: UIEdgeInsetsMake (6, 6, 6, 6)] '। वास्तविक छवि को ऐप्पल के समान ऊंचाई की आवश्यकता होती है, लेकिन चौड़ाई केवल बाएं और दाएं कैप्स + 1px फिट करने के लिए जरूरी जितनी बड़ी होनी चाहिए जो पाठ को फिट करने के लिए प्रोग्रामेटिक रूप से फैलाया जाएगा। –

+2

सुझाव एंड्रयू के लिए धन्यवाद, हालांकि आपने अलग-अलग छवियों और कोई टेक्स्ट के साथ प्रत्येक दृश्य पर अलग-अलग कस्टम बैक बटन रखने की मुख्य समस्या का समाधान नहीं किया है। – RobDigital

0

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

0

UIAppearance इस मामले में कोई उपयोग नहीं है।

मैंने उपयोग करने का प्रयास किया: - [UIBarButtonItem initWithCustomView:]। यहां देखें कि आप अपनी पृष्ठभूमि छवि और शीर्षक जो भी चाहें जोड़ सकते हैं।

3

कुछ कोड मैं एक परियोजना में इस्तेमाल:

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; 
UIImage *btnImg = [UIImage imageNamed:@"ButtonRetourInactive"]; 
[btn setImage:btnImg forState:UIControlStateNormal]; 

btn.frame = CGRectMake(0, 0, btnImg.size.width, btnImg.size.height); 
[btn addTarget:self action:@selector(goBack:) forControlEvents:UIControlEventTouchUpInside]; 
self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:btn] autorelease]; 

ध्यान दें, यह आईओएस 4 और 3 में अच्छी तरह से काम करता है।

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