2010-02-27 15 views
20

ho ottenuto il seguente codice:UINavigationBar BarButtonItem con Plain Style

- (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; 
} 

ma il mio tasto sembra ancora un pulsante con UIBarButtonItemStyleBordered alt text http://img693.imageshack.us/img693/1632/bildschirmfoto20100227ui.png

c'è un modo per impostare un pulsante con stile semplice a questo posizione?

risposta

23

Creare un UIButton nel generatore di interfacce, farlo sembrare esattamente ciò che si desidera. Creare uno sbocco per in nel vostro .h:

IBOutlet UIButton * _myButton; 

poi impostarlo come oggetto tasto destro del bar con una visualizzazione personalizzata, che eliminerà il confine:

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

Questo funziona perché è un UIButton sottoclasse di UIView.

+2

Anche se si desidera ottenere effetto ombra caduta i pulsanti normali hanno fatto questo: '_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

Sono d'accordo con questa soluzione. Ma, pensi che Apple faccia questo nella loro app per iPad? sembra un po 'un trucco. – ajayjapan

+0

come faresti per un array di rightButtonBarItems? – dev6546

1

Anche se Frank ha ragione, questo codice dovrebbe essere in viewDidLoad, il problema qui è ciò che assomiglia a BarButtons. Se vuoi che appaia diverso, devi utilizzare un diverso tipo di UIView. È possibile aggiungere un UIButton a un UIToolbar bene.

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

Edit:

Siamo spiacenti, si voleva un UIBarButtonItem pianura. Non credo che tu possa farlo con una UINavigationBar. Potresti provare ad aggiungere una UILabel UserInteractionEnabled come rightBarButtonItem, non sono sicuro che funzionerà o meno.

Sembra che questo non sia attualmente possibile.
sbwoodside has a solution.

+0

Inoltre, rightBarButtonItems ha bisogno di un UIBarButtonItem come tipo di oggetto – choise

+0

Realmente? Dannazione, so che puoi attaccare tutto ciò che vuoi nel titolo. Questo è davvero deludente. –

+0

'@property (nonatomic, retain) UIBarButtonItem * rightBarButtonItem;' hm o interpreto qualcosa di sbagliato? – choise

23

Prova a modificare:

- (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; 
} 

Speranza che aiuta.

+0

Si dovrebbe rilasciare anche 'preferito', dopo l'assegnazione. – Alexander

+0

Questo mi aiuta :) – 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

Il codice contiene errori e non è quello che stava cercando. 'UIBarButtonSystemItemAdd' non è un UIBarButtonItemStyle. – FelixLam

8

O fare questo nel codice senza 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; 

risultati in:

enter image description here

Quando si usa questa immagine Icona (è bianco su uno sfondo bianco in modo non è visibile qui - il collegamento è: http://i.stack.imgur.com/lk5SB.png): enter image description here

-1

Prova questo,

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

E 'strano, ma funziona. Dì "No" alle immagini/prese! Non si dovrebbe nemmeno impostare la proprietà UIBarButtonItemStylePlain. Il trucco è inserire il pulsante in UIToolBar con alcuni attributi speciali:

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

Perché non provare UI7Kit? Funziona bene per me, facile da usare.

Problemi correlati