2009-07-31 9 views
9

नेविगेशन नियंत्रक को लागू किए गए ऐप में किसी भी दृश्य में नेविगेट करने पर, यह पिछले बटन पर जाने के लिए एक बैक बटन दिखाता है राय। क्या कोई तरीका है कि मैं डिफ़ॉल्ट छवि के बजाय कस्टम छवि का उपयोग कर सकता हूं?मैं नेविगेशन बार के बजाय नेविगेशन बार बैक बटन में कस्टम छवि कैसे दिखा सकता हूं जो एनएवी बार द्वारा दिखाया गया है

उत्तर

18

हाँ आप कर सकते हैं।

आप मानक वापस बटन अपने नेविगेशन आइटम की पीठ बार बटन आइटम की स्थापना करके जब अन्य दृश्य नियंत्रक दिए गए दृश्य नियंत्रक के शीर्ष पर धकेल दिया जाता है कैसे दिखेगा नियंत्रित कर सकते हैं (आप शीर्षक अनुकूलित कर सकते हैं या किसी छवि का उपयोग):

UIBarButtonItem *btn = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:nil action:nil]; 
self.navigationItem.backBarButtonItem = btn; 
[btn release]; 

UIBarButtonItem *btn = [[UIBarButtonItem alloc] initWithImage:yourImage style:UIBarButtonItemStyleBordered target:nil action:nil]; 
self.navigationItem.backBarButtonItem = btn; 
[btn release]; 

नोट: यदि आप अन्य दृश्य नियंत्रक (रों) हो सकता है कि एक "जनक" दृश्य नियंत्रक में इस कॉन्फ़िगर यह की चोटी पर धक्का दे दिया। कॉन्फ़िगरेशन "पैरेंट" में किया जाता है और बैक बटन की उपस्थिति तब बदल जाती है जब कुछ व्यू कंट्रोलर शीर्ष पर होता है। बैक बटन टैप करने से आपको उम्मीद के रूप में वापस लाया जाता है। इस मामले में, वापस/बाईं बार:


आप अपना स्वयं का UIBarButtonItem बना सकते हैं और leftButtonItem के रूप में सेट वर्तमान दृश्य नियंत्रक पर नेविगेशन पट्टी पर कर सकते हैं:

UIBarButtonItem *btn = [[UIBarButtonItem alloc] initWithImage:yourImage style:UIBarButtonItemStyleBordered target:self action:@selector(yourMethod:)]; 
self.navigationItem.leftBarButtonItem = btn; 
[btn release]; 

नोट वर्तमान दृश्य नियंत्रक के लिए बटन आइटम बदल दिया गया है (जब यह शीर्ष पर है)। आपको yourMethod: विधि को लागू करना होगा। यदि आप बस बटन को वापस जाना चाहते हैं, तो आपको [self.navigationController popViewControllerAnimated:YES]; पर कॉल करके दृश्य नियंत्रक को पॉपिंग करना होगा।

3

मैंने पाया कि समाधानों में से कोई भी वास्तव में बैक UIBarButton को हल नहीं करता है और दृश्य नियंत्रक रूट होने पर इसके छिपे व्यवहार भी प्रदान करता है।

-(void)popViewControllerWithAnimation { 
[self.navigationController popViewControllerAnimated:YES]; 
} 

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    if([self.navigationController.viewControllers objectAtIndex:0] != self) 
    { 
     UIButton *backButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 26, 26)]; 
     [backButton setImage:[UIImage imageNamed:@"back"] forState:UIControlStateNormal]; 
     [backButton setShowsTouchWhenHighlighted:TRUE]; 
     [backButton addTarget:self action:@selector(popViewControllerWithAnimation) forControlEvents:UIControlEventTouchDown]; 
     UIBarButtonItem *barBackItem = [[UIBarButtonItem alloc] initWithCustomView:backButton]; 
     self.navigationItem.hidesBackButton = TRUE; 
     self.navigationItem.leftBarButtonItem = barBackItem; 
    } 
} 
0

यह लगभग एक वापस बटन की तरह काम करता है। संक्रमण एनीमेशन के अपवाद के साथ (बटन टैप करने के बाद और वर्तमान दृश्य दाईं ओर नेविगेशन से पॉप किया गया है)।

एक श्रेणी बनाने का सही तरीका है।

@interface UINavigationBar (MyNavigationBar) 
-(void)drawRect:(CGRect)rect; 
@end 

@implementation UINavigationBar (MyNavigationBar) 
-(void)drawRect:(CGRect)rect { 
UIImage *image = [UIImage imageNamed:@"....."]; 
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; 
संबंधित मुद्दे