2013-01-10 10 views
7

UIBarButtonItem için özel olarak basılan bir resim ayarlamaya çalışıyorum ancak hiçbir şey çalışmıyor gibi görünüyor. Anlayışımdan aşağıdaki kod çalışmalı, ancak vurgulanan durum için görüntü ayarlamaya rağmen, düğmeye basıldığında düğme tam olarak aynı görünecektir.Özel "Basılı" UIBarButtonItem Backgrounds

Herhangi bir fikrin var mı?

UIImage *barButtonBackground = [[UIImage imageNamed:ANBarButtonItemBackgroundImageName] resizableImageWithCapInsets:UIEdgeInsetsMake(5.0f,5.0f, 5.0f, 5.0f)]; 
UIImage *barButtonPressedBackground = [[UIImage imageNamed:ANBarButtonPressedImageName] resizableImageWithCapInsets:UIEdgeInsetsMake(5.0f,5.0f, 5.0f, 5.0f)]; 

[self.navigationItem.leftBarButtonItem setBackgroundImage:barButtonBackground forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 
[self.navigationItem.rightBarButtonItem setBackgroundImage:barButtonBackground forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

[self.navigationItem.leftBarButtonItem setBackgroundImage:barButtonPressedBackground forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault]; 
[self.navigationItem.rightBarButtonItem setBackgroundImage:barButtonPressedBackground forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault]; 
+0

nasıl düğmeleri oluşturuyorsunuz? Hangi görüntüyü görebiliyorsunuz? – foundry

+0

Basılı görüntünün aslında farklı olduğundan emin misiniz? Görüntüleri değiştirmeyi deneyin. –

+0

İki resmi de kontrol ettim, farklılar. Düğmeler Storyboard'umda oluşturulur. IBActions, icons ve sofourth'un tümü, bar düğmesi öğelerinde çalışır - Vurgulandığında, bu BarButtonItems için görünecek alternatif görüntüyü alamıyorum. – arooo

cevap

23

Ben o zaman bir custom UIBarButtonItem için görünüm olarak bu UIButton kullanın renk düzenine uyacak farklı kontrol devletler için custom UIButton arka plan resimleri ile oluşturmak gerektiğini düşünüyorum. Eğer diğer bazı Referans o zaman bu güzel link üzerinden gidebilirsiniz istiyorsanız

UIButton *customButton = [UIButton buttonWithType:...]; 

[customButton setBackgroundImage:barButtonBackground forState:UIControlStateNormal]; 
[customButton setBackgroundImage:barButtonPressedBackground forState:UIControlStateSelected]; 

UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView: customButton]; 

: Using Appearance Proxy to Style Apps

+1

Gerçekten UIBarButtonItems ile bunu yapmak için kolay bir yol olduğunu umuyordum, ama bu bulabildiğim gitmek için en iyi yol gibi görünüyor. Teşekkürler. – arooo

+0

Bu işe yarayacak, ancak farklı durumlar için farklı görüntüler (arka plan görüntüleri değil) koymak istiyorsak ne olur? UIBarButtonItem üzerindeki setImage yöntemi forState yöntemine sahip gibi görünmüyor ... Sadece arkaplan için değil, resmin değişmesine de ihtiyacım var. Bununla ilgili bir fikrin var mı? – Stan

+0

Aynı soru stan olarak mı ?? – user1010819

3

Muhtemelen böyle deneyebilirsiniz. Benim için çalışıyor.

UIBarButtonItem + customLook.h

#import <UIKit/UIKit.h> 

@interface UIBarButtonItem (customLook) 

+ (UIBarButtonItem *)barButtonItemWithImage:(UIImage *)image selectedBackGroundImage:(UIImage *)selected target:(id)target action:(SEL)selector; 

@end 

UIBarButtonItem + customLook.m

#import "UIBarButtonItem+customLook.h" 

@implementation UIBarButtonItem (customLook) 

+ (UIBarButtonItem *)barButtonItemWithImage:(UIImage *)image selectedBackGroundImage:(UIImage *)selected target:(id)target action:(SEL)selector 
{ 
    UIButton* someButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [someButton setImage:image forState:UIControlStateNormal]; 
    [someButton setBackgroundImage:selected forState:UIControlStateSelected]; 

    CGSize size = image.size; 
    CGRect frame = CGRectZero; 
    frame.size.width = size.width; 
    frame.size.height = 30.0f; // Standart height 
    someButton.frame = frame; 

    [someButton addTarget:target action:selector forControlEvents:UIControlEventTouchUpInside]; 

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

    return backButton; 
} 

@end 

bazıları:

UIImage* image3 = [UIImage imageNamed:@"mail-48_24.png"]; 
CGRect frameimg = CGRectMake(0, 0, image3.size.width, image3.size.height); 
UIButton *someButton = [[UIButton alloc] initWithFrame:frameimg]; 
[someButton setBackgroundImage:image3 forState:UIControlStateNormal]; 
[someButton addTarget:self action:@selector(sendmail) 
    forControlEvents:UIControlEventTouchUpInside]; 
[someButton setShowsTouchWhenHighlighted:YES]; 

UIBarButtonItem *mailbutton =[[UIBarButtonItem alloc] initWithCustomView:someButton]; 
self.navigationItem.rightBarButtonItem=mailbutton; 
[someButton release]; 
2

Belki bu (sadece o projeye dosyalar ekleyin) size yardımcı olacaktır kontrolörü göster:

#import "UIBarButtonItem+customLook.h" 
... 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    UIBarButtonItem *bbi = [UIBarButtonItem barButtonItemWithImage:[UIImage imageNamed:@"29-heart-selected.png"] 
              selectedBackGroundImage:[UIImage imageNamed:@"DarkButton_Pressed.png"] 
                  target:self 
                  action:@selector(someAction:)]; 
    self.navigationItem.rightBarButtonItem = bbi; 
} 

...

- (void)someAction:(id)sender 
{ 
    [(UIButton *)sender setSelected:YES]; 
} 
1
UIImage* btnImage = [UIImage imageNamed:@"share-icon-deselected-16x16.png"]; 
    CGRect frameimg = CGRectMake(0, 0, btnImage.size.width, btnImage.size.height); 
    UIButton *someButton = [[UIButton alloc] initWithFrame:frameimg]; 
    [someButton setBackgroundImage:btnImage forState:UIControlStateNormal]; 
    [someButton addTarget:self action:@selector(share:) 
     forControlEvents:UIControlEventTouchUpInside]; 
    [someButton setShowsTouchWhenHighlighted:YES]; 

    UIBarButtonItem *mailbutton =[[UIBarButtonItem alloc] initWithCustomView:someButton]; 
    self.navigationItem.rightBarButtonItem=mailbutton; 




- (void)share:(id)sender{ 
    UIButton*btn = (UIButton*)sender; 
    if (btn.isSelected) 
    { 
     [btn setSelected:NO]; 
     [btn setBackgroundImage:[UIImage imageNamed:@"share-icon-deselected-16x16.png"] forState:UIControlStateNormal]; 
    } 
    else 
    { 
     [btn setSelected:YES]; 
     [btn setBackgroundImage:[UIImage imageNamed:@"share-icon-selected-16x16.png"] forState:UIControlStateNormal]; 
    } 
}; 
+1

Görüntü genişliğini ve yüksekliğini kullanmak için önerinizi beğeniyorum. Ama birkaç öneride bulunmama izin verin. Düğmenizi ayarladığınızda, görüntüyü [stateButton setBackgroundImage: selectedImage forState: UIControlStateSelected]; . Paylaşım yönteminizde, UIButton'u paramın türü olarak kullanın ve bu satırı kullanarak geçiş yapın: button.selected =! Button.selected; Kendine iyi bak. – smileBot

+0

Yup, thats right :) Öneriniz için teşekkürler @cocoanut. – Abo3atef