UIBarButtonItem com cor?

É possível ter um UIBarButtonItem vermelho?

Se alguém estiver procurando por código para duplicar exatamente um UIBarButtonItem simples:

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; [button setBackgroundImage:[UIImage imageNamed:@"delete.png"] forState:UIControlStateNormal]; [button setTitle:@"Delete" forState:UIControlStateNormal]; button.titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:12.0f]; [button.layer setCornerRadius:4.0f]; [button.layer setMasksToBounds:YES]; [button.layer setBorderWidth:1.0f]; [button.layer setBorderColor: [[UIColor grayColor] CGColor]]; button.frame=CGRectMake(0.0, 100.0, 60.0, 30.0); [button addTarget:self action:@selector(batchDelete) forControlEvents:UIControlEventTouchUpInside]; UIBarButtonItem* deleteItem = [[UIBarButtonItem alloc] initWithCustomView:button]; 

E delete.png é:

delete.png

Por que não apenas:

 [[self editButtonItem] setTintColor:[UIColor redColor]]; 

(no sdk 4. *, ios 5 e acima)

Você pode criar um UIButton personalizado com sua aparência desejada e inicializar seu UIBarButtonItem com ele como uma exibição personalizada.

 UIButton *button = [UIButton buttonWithType:....]; ...(customize your button)... UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithCustomView:button]; 

Você pode definir a propriedade tintColor de um UIBarButtonItem no iOS 5. Se você precisar dar suporte ao iOS 4, confira esta postagem no blog . Ele detalha usando um estilo UISegmentedControl para parecer um único botão.

Usar uma imagem personalizada não funciona, pois usa apenas o alfa para renderizar o botão.

Ok, há realmente uma solução muito melhor para isso, na minha opinião, que envolve menos código e usa os controles de interface do usuário nativos.

O truque é usar um UISegmentedControl e remover todos os segmentos, exceto um. (Não pode ser feito no IB, tem que ser feito de forma programática).

Depois de fazer isso, defina a cor da tonalidade e crie um UIBarButtonItem passando o UISegmentedControl como uma exibição personalizada.

Esse cara usou a técnica para criar uma categoria de UIBarButtonItem que funciona de forma shiny:

http://fredandrandall.com/blog/2011/03/31/how-to-change-the-color-of-a-ibaribarutem/

Você pode criar uma imagem personalizada para o botão e usá-la. Senão, se você definiu a tonalidade Cor da sua barra de navegação ou barra de ferramentas para vermelho, os itens dos botões também aparecerão vermelhos.

Se for o UIBarButtonItem de um UIToolbar

definir isso antes de sua implementação no arquivo que você deseja que este código

 @class UIToolbarTextButton; 

Em seguida, altere os botões da barra de ferramentas fazendo isso:

  for (UIView *view in self.navigationController.toolbar.subviews) { NSLog(@"%@", [[view class] description]); if ([[[view class] description] isEqualToString:@"UIToolbarTextButton"]) { [(UIToolbarTextButton *)view setTintColor:yourcolor]; } } 

Se estiver usando o IB (Interface Builder), arraste um UIView da Biblioteca para o UIToolBar e ele gerará um UIBarButtonItem com uma visualização customizada. Você pode então adicionar quaisquer outros controles que desejar, por exemplo, UIButton , UILabel , UIActivityIndicatorView .

Eu queria adicionar algo à solução realçada. Se você fizer essa subclass, ele não executará seguidos e seletores desafiados pelo storyboard que são atribuídos ao UIBarButtonItem. Além disso, as propriedades ‘target’ e ‘action’ não são configuradas no UIBarButtonItem, portanto você não pode acessá-las a partir da subclass e atribuí-las ao seu UIButton.

Eu trabalhei em torno disso adicionando 2 propriedades à minha subclass (usando ARC):

 @property (nonatomic, weak) id targetViewController; @property (nonatomic, strong) NSString *segueIdentifier; 

Em seguida, no init de sua subclass, adicione algo assim ao código de resposta aceito:

 [button addTarget:self action:@selector(performAction) forControlEvents:UIControlEventTouchUpInside]; 

e uma function:

 - (void)performAction { if (_targetViewController && _segueIdentifier) { [_targetViewController performSegueWithIdentifier:_segueIdentifier sender:self]; } else { NSLog(@"Requires targetViewController and segueIdentifier to be set"); } } 

finalmente, no seu controlador de visualização principal que está hospedando tudo isso, no ‘viewDidLoad’, adicione isto:

 _fancyBarButtonItem.segueIdentifier = @"NewTransaction"; _fancyBarButtonItem.targetViewController = self; 

Espero que isso ajude alguém a economizar tempo ao iniciar esse caminho com Storyboards / iOS5

Quando você tem a configuração UIBarButtonItem em um Storyboard , você precisa configurar o tintColor no método viewWillAppear() ou viewDidAppear() (colocando-o em viewDidLoad () não funciona para mim …):

 - (void)viewWillAppear { [super viewWillAppear]; [[self editButtonItem] setTintColor:[UIColor redColor]]; } 

Ou em Swift:

 override func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) editButtonItem.tintColor = UIColor.redColor() } 

Nota: testado no iOS 8/9 .