2010-02-27 17 views
20

me dieron el siguiente código:UINavigationBar BarButtonItem con estilo llano

- (id)init { 
    if (self = [super init]) { 
     self.title = @"please wait"; 
     UIBarButtonItem *favorite = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"star.png"] style:UIBarButtonItemStylePlain target:self action:@selector(buttonFavoriteClicked:)]; 
     self.navigationItem.rightBarButtonItem = favorite; 
    } 

    return self; 
} 

pero mi botón se ve todavía como un botón con UIBarButtonItemStyleBordered alt text http://img693.imageshack.us/img693/1632/bildschirmfoto20100227ui.png

¿hay una manera de establecer un botón con estilo llano en este ¿posición?

Respuesta

23

Crea un UIButton en el constructor de interfaces, haz que se vea exactamente como lo quieres. Crear una salida para su .h en en:

IBOutlet UIButton * _myButton; 

A continuación, configurarlo como elemento de botón de la barra derecha usando una vista personalizada, lo que eliminará la frontera:

self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:_myButton]; 

Esto funciona porque es un UIButton subclase de UIView.

+2

También si desea obtener efecto de sombra de gota botones simples tienen que hacer esto: '_myButton.layer.shadowOpacity = 1.0;' '_myButton.layer.shadowRadius = 0.0;' '_myButton.layer.shadowColor = [UIColor blackColor] .CGColor;' '_myButton.layer.shadowOffset = CGSizeMake (0.0, [UIScreen mainScreen] .scale == 1? -1: -1.5); ' – nacho4d

+2

Estoy de acuerdo con esta solución. Pero, ¿crees que Apple hace esto en su aplicación de correo iPad? parece un pequeño truco. – ajayjapan

+0

¿cómo harías esto para una variedad de rightButtonBarItems? – dev6546

1

Aunque Frank tiene razón, este código debería estar en viewDidLoad, el problema aquí es cómo se ven los BarButtons. Si desea que se vea diferente, debe usar un tipo diferente de UIView. Puede agregar un UIButton a una UIToolbar muy bien.

-(void)viewDidLoad { 
    [super viewDidLoad]; 
    self.title = @"please wait"; 
    self.navigationItem.rightBarButtonItem = [[[UIButton alloc] init] autorelease]; 
} 

Editar:

Lo sentimos, que querían un UIBarButtonItem llanura. No creo que puedas hacer esto con UINavigationBar. Podría tratar de agregar UserInteractionEnabled UILabel como rightBarButtonItem, no estoy seguro si funcionará o no.

Parece que esto no es posible en la actualidad.
sbwoodside has a solution.

+0

también, rightBarButtonItems necesita un UIBarButtonItem como tipo de objeto – choise

+0

¿Realmente? Maldita sea, sé que puedes poner lo que quieras en el título. Eso es realmente decepcionante. –

+0

'@property (nonatomic, retener) UIBarButtonItem * rightBarButtonItem;' hm, o interpreto algo mal? – choise

23

Tal vez puedas probar:

- (id)init { 
    if (self = [super init]) { 
     self.title = @"please wait"; 

     UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 25, 25)]; 
     [button setImage:[UIImage imageNamed:@"star.png"] forState:UIControlStateNormal]; 
     [button addTarget:self action:@selector(buttonFavoriteClicked) forControlEvents:UIControlEventTouchUpInside]; 
     UIBarButtonItem *favorite = [[UIBarButtonItem alloc] initWithCustomView:button]; 
     [button release]; 

     self.navigationItem.rightBarButtonItem = favorite; 
    } 

    return self; 
} 

espero que ayude.

+0

También debe liberar 'favorito', después de asignar. – Alexander

+0

Esto me ayuda :) – sabadow

-1
UIImage *img = [UIImage imageNamed:@"white_star.png"]; 

     CGSize itemSize = CGSizeMake(20, 20); 
     UIGraphicsBeginImageContext(itemSize); 
     CGRect imageRect = CGRectMake(0.0, 0.0, itemSize.width, itemSize.height); 
     [img drawInRect:imageRect]; 
     img = UIGraphicsGetImageFromCurrentImageContext(); 
     UIGraphicsEndImageContext(); 


    UIBarButtonItem *barButton = [[UIBarButtonItem alloc ] initWithImage:img style:UIBarButtonSystemItemAdd target:self action:@selector(favoriteButtonClicked)]; 
    barButton.style = UIBarButtonItemStyleBordered; 
+0

El código contiene errores y no es lo que estaba buscando. 'UIBarButtonSystemItemAdd' no es un UIBarButtonItemStyle. – FelixLam

8

O hacer esto en código sin IB:

// add setting button to nav bar 
UIImage* settingsGearImg = [UIImage imageNamed:@"settings_gear.png"]; 
CGRect frameimg = CGRectMake(0, 0, settingsGearImg.size.width, settingsGearImg.size.height); 
UIButton *settingsButton = [[UIButton alloc] initWithFrame:frameimg]; 
[settingsButton setBackgroundImage:settingsGearImg forState:UIControlStateNormal]; 
[settingsButton addTarget:self action:@selector(settingsButtonAction) forControlEvents:UIControlEventTouchUpInside]; 
[settingsButton setShowsTouchWhenHighlighted:YES]; 
UIBarButtonItem *settingButtonItem =[[UIBarButtonItem alloc] initWithCustomView:settingsButton]; 
self.navigationItem.leftBarButtonItem = settingButtonItem; 

Resultados en:

enter image description here

Cuando se utiliza esta imagen icono (que es blanco sobre un fondo blanco por lo que no es visible aquí - el enlace es: http://i.stack.imgur.com/lk5SB.png): enter image description here

-1

Prueba de esto,

UIBarButtonItem *barBtn = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"more.png"] style:UIBarButtonItemStylePlain target:self action:@selector(didPressButton)]; 
4

Es raro, pero funciona. Di "No" a las imágenes/puntos de venta! Ni siquiera debería establecer la propiedad UIBarButtonItemStylePlain. El truco es colocar el botón en UIToolBar con algunos atributos especiales:

UINavigationItem *item = [[UINavigationItem alloc] initWithTitle:@"Cool plain bar"]; 
UIToolbar *tools = [[UIToolbar alloc] 
        initWithFrame:CGRectMake(0.0f, 0.0f, 44.0f, 44.01f)]; 
tools.clipsToBounds = NO; 
tools.barStyle = -1; // clear background 
NSMutableArray *buttons = [[NSMutableArray alloc] initWithCapacity:1]; 
UIBarButtonItem *bi = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(refreshTableView)]; 
[buttons addObject:bi]; 
[tools setItems:buttons animated:NO]; 
UIBarButtonItem *rightButtons = [[UIBarButtonItem alloc] initWithCustomView:tools]; 

item.rightBarButtonItem = rightButtons; 
item.hidesBackButton = YES; 
[myCoolNavigationBar pushNavigationItem:item animated:NO]; 
0

¿Por qué no probar UI7Kit? Funciona bien para mí, es fácil de usar.