2011-09-05 16 views
9

में बटन से चमक प्रभाव को हटा रहा है मैं नेविगेशन बार पर बटन से चमक/चमक प्रभाव को कैसे हटा सकता हूं? यदि मैं कस्टम छवि का उपयोग कर नेविगेशन बार को कस्टमाइज़ करता हूं तो बटन प्रभावित नहीं होते हैं, क्या मैं उनसे (लाइन और चमक) से प्रभाव हटा सकता हूं, या पूरे बटन के लिए हेक्स रंग कोड परिभाषित कर सकता हूं, या यहां तक ​​कि उनके लिए एक कस्टम छवि भी परिभाषित कर सकता हूं भी?UINavigationBar

+1

@Rudy - आप सवाल लगता है कि दूसरे का डुप्लिकेट हो सकता है, बल्कि सवाल के शरीर को संपादित करने के इस तरह के रूप में यह बंद करने के लिए वोट करें। –

+0

यह एक संभावित डुप्लिकेट है [आईओएस: एक बार के साथ खोज बार पृष्ठभूमि चमक/चमक को कैसे बदलें] (http://stackoverflow.com/questions/6696200/ios-how-to-replace-search-bar-background- चमक-चमक-एक-रंग) –

उत्तर

18

मैं बस इसे समझने की प्रक्रिया के माध्यम से चला गया। असल में, आपको कस्टम खिंचाव वाली छवियां बनाने और चमक से छुटकारा पाने के लिए बटन की पृष्ठभूमि के रूप में उपयोग करने की आवश्यकता है। UINavigationController में बैक बटन को प्रतिस्थापित करना थोड़ा कठिन है। इसके लिए मैंने अपने कस्टम बटन के साथ डिफ़ॉल्ट बैक बटन को प्रतिस्थापित करने के लिए एक UINavigationControllerDelegate का उपयोग किया।

  1. UIBarButtonItem पर एक वर्ग है कि अपने कस्टम बटन बनाता बनाएँ:

    यहाँ कुछ कोड है। ये मेरा।

    @interface UIBarButtonItem (UIBarButtonItem_customBackground) 
    
    + (id) customBarButtonWithTitle:(NSString *)title target:(id)target selector:(SEL)selector; 
    + (id) customBackButtonWithTitle:(NSString *)title target:(id)target selector:(SEL)selector; 
    
    @end 
    
    @implementation UIBarButtonItem (UIBarButtonItem_customBackground) 
    
    + (id) customButtonWithImageNamed:(NSString *)imageName selectedImageNamed:(NSString *)selectedImageName leftCapWidth:(CGFloat)leftCapWidth edgeInsets:(UIEdgeInsets)edgeInsets title:(NSString *)title target:(id)target selector:(SEL)selector { 
        UIButton* customButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
        [customButton addTarget:target action:selector forControlEvents:UIControlEventTouchUpInside]; 
        customButton.titleLabel.font = [UIFont boldSystemFontOfSize:12.0f]; 
        customButton.titleLabel.shadowColor = [UIColor colorWithRed:0.0f/255.0f green:0.0f/255.0f blue:0.0f/255.0f alpha:0.25f]; 
        customButton.titleLabel.shadowOffset = CGSizeMake(0.0f, -1.0f); 
        customButton.titleLabel.lineBreakMode = UILineBreakModeTailTruncation; 
        customButton.titleEdgeInsets = edgeInsets; 
        UIImage* navButtonBackgroundImage = [[UIImage imageNamed:imageName] stretchableImageWithLeftCapWidth:leftCapWidth topCapHeight:0.0f]; 
        UIImage* navButtonPressedBackgroundImage = [[UIImage imageNamed:selectedImageName] stretchableImageWithLeftCapWidth:leftCapWidth topCapHeight:0.0f]; 
        [customButton setBackgroundImage:navButtonBackgroundImage forState:UIControlStateNormal]; 
        [customButton setTitle:title forState:UIControlStateNormal]; 
        [customButton setBackgroundImage:navButtonPressedBackgroundImage forState:UIControlStateHighlighted]; 
        [customButton setBackgroundImage:navButtonPressedBackgroundImage forState:UIControlStateSelected]; 
    
        CGSize size = CGSizeMake(30.0f, 30.0f); 
        if (title != nil) { 
         size = [[NSString stringWithString:title] sizeWithFont:customButton.titleLabel.font]; 
        } 
        customButton.frame = CGRectMake(0.0f, 0.0f, size.width + 20.0f, 30.0f); 
        customButton.layer.shouldRasterize = YES; 
        customButton.layer.rasterizationScale = [[UIScreen mainScreen] scale]; 
        return [[[UIBarButtonItem alloc] initWithCustomView:customButton] autorelease]; 
    } 
    
    + (id) customBarButtonWithTitle:(NSString *)title target:(id)target selector:(SEL)selector { 
        return [self customButtonWithImageNamed:@"navButtonBG.png" 
           selectedImageNamed:@"navButtonPressedBG.png" 
             leftCapWidth:6.0f 
             edgeInsets:UIEdgeInsetsMake(0.0f, 5.0f, 0.0f, 5.0f) 
               title:title 
              target:target 
              selector:selector]; 
    } 
    
    + (id) customBackButtonWithTitle:(NSString *)title target:(id)target selector:(SEL)selector {  
        return [self customButtonWithImageNamed:@"backButtonBG.png" 
           selectedImageNamed:@"backButtonPressedBG.png" 
             leftCapWidth:12.0f 
             edgeInsets:UIEdgeInsetsMake(0.0f, 11.0f, 0.0f, 5.0f) 
               title:title 
              target:target 
              selector:selector]; 
    } 
    
    @end 
    
  2. अपने UINavigationBar

    UIBarButtonItem* logoutButton = [UIBarButtonItem customBarButtonWithTitle:@"Logout" target:self selector:@selector(logout)]; 
    self.navigationItem.rightBarButtonItem = logoutButton; 
    
  3. के लिए बटन जोड़ें आप भी UINavigationController के वापस बटन को बदलने के लिए चाहते हैं, एक UINavigationControllerDelegate सेटअप: मैं दोनों नियमित बार बटनों और वापस बटन अनुकूलित करने के लिए इस श्रेणी का उपयोग और इतने तरह willShowViewController तरीका लागू:

    - (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated { 
        if([navigationController.viewControllers count ] > 1) { 
         UIViewController* backViewController = [navigationController.viewControllers objectAtIndex:(navigationController.viewControllers.count - 2)]; 
         NSString* backText = backViewController.title; 
         UIBarButtonItem* newBackButton = [UIBarButtonItem customBackButtonWithTitle:backText target:navigationController selector:@selector(popViewControllerAnimated:)]; 
         viewController.navigationItem.leftBarButtonItem = newBackButton; 
         viewController.navigationItem.hidesBackButton = YES; 
        } 
    } 
    
  4. यहाँ stretc हैं Hable छवियों मैं उपयोग कर रहा हूँ:

    • वापस बटन: back button दबाया: enter image description here
    • नियमित बटन: enter image description here दबाया: enter image description here
+0

आप। जा सकता है। इसलिए। FEAKING। बहुत बढ़िया!!!!! मुझे तुमसे मोहब्बत है! – Eugene

+0

@ जस्टिन गैलाघर जस्टिन धन्यवाद धन्यवाद, धन्यवाद! –

+0

मैं इस कोड को प्रोजेक्ट में उपयोग करने के लिए कैसे जोड़ूं? –

0

आपको छवियों पर किसी भी चमक प्रभाव के बिना कस्टम बटन का उपयोग करना होगा जिसके द्वारा आप नेविबार से बटन के ग्लूस प्रभाव से छुटकारा पा सकते हैं।

2

वापस बटन इसे लागू करने के लिए आवश्यक नहीं है बदल रहा है के लिए प्रतिनिधि विधि uinavigationcontroller।

वांछित बैकबटन को सेट करने के बाद आपको केवल HidesBckButton प्रॉपर्टी को सेट करने की आवश्यकता है क्योंकि @ जस्टिन गैलाकर ने पूरी तरह से समझाया है।

self.navigationItem.leftBarButtonItem = [UIBarButtonItem customBackButtonWithTitle:@"Back" target:self.navigationController selector:@selector(popViewControllerAnimated:)]; 
self.navigationItem.hidesBackButton = YES; 
+0

यह भी जरूरी नहीं है, बाएंबर्टबटन इटिम संपत्ति को सेट करना बैक बटन ओवरराइड करेगा – Daniel

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