Imagem de botão personalizada sem definir a moldura do botão:
Você pode usar init(image: UIImage?, style: UIBarButtonItemStyle, target: Any?, action: Selector?)
para inicializar um novo item usando a imagem especificada e outras propriedades.
let button1 = UIBarButtonItem(image: UIImage(named: "imagename"), style: .plain, target: self, action: Selector("action")) // action:#selector(Class.MethodName) for swift 3
self.navigationItem.rightBarButtonItem = button1
Verifique este Apple Doc. referência
UIBarButtonItem com imagem de botão personalizada usando a moldura do botão
PARA Swift 3.0
let btn1 = UIButton(type: .custom)
btn1.setImage(UIImage(named: "imagename"), for: .normal)
btn1.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
btn1.addTarget(self, action: #selector(Class.Methodname), for: .touchUpInside)
let item1 = UIBarButtonItem(customView: btn1)
let btn2 = UIButton(type: .custom)
btn2.setImage(UIImage(named: "imagename"), for: .normal)
btn2.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
btn2.addTarget(self, action: #selector(Class.MethodName), for: .touchUpInside)
let item2 = UIBarButtonItem(customView: btn2)
self.navigationItem.setRightBarButtonItems([item1,item2], animated: true)
PARA Swift 2.0
e mais velhos
let btnName = UIButton()
btnName.setImage(UIImage(named: "imagename"), forState: .Normal)
btnName.frame = CGRectMake(0, 0, 30, 30)
btnName.addTarget(self, action: Selector("action"), forControlEvents: .TouchUpInside)
//.... Set Right/Left Bar Button item
let rightBarButton = UIBarButtonItem()
rightBarButton.customView = btnName
self.navigationItem.rightBarButtonItem = rightBarButton
Ou simplesmente use init (customView :) como
let rightBarButton = UIBarButtonItem(customView: btnName)
self.navigationItem.rightBarButtonItem = rightBarButton
Para System UIBarButtonItem
let camera = UIBarButtonItem(barButtonSystemItem: .Camera, target: self, action: Selector("btnOpenCamera"))
self.navigationItem.rightBarButtonItem = camera
Para definir mais de 1 itens, use rightBarButtonItems
ou para o lado esquerdoleftBarButtonItems
let btn1 = UIButton()
btn1.setImage(UIImage(named: "img1"), forState: .Normal)
btn1.frame = CGRectMake(0, 0, 30, 30)
btn1.addTarget(self, action: Selector("action1:"), forControlEvents: .TouchUpInside)
let item1 = UIBarButtonItem()
item1.customView = btn1
let btn2 = UIButton()
btn2.setImage(UIImage(named: "img2"), forState: .Normal)
btn2.frame = CGRectMake(0, 0, 30, 30)
btn2.addTarget(self, action: Selector("action2:"), forControlEvents: .TouchUpInside)
let item2 = UIBarButtonItem()
item2.customView = btn2
self.navigationItem.rightBarButtonItems = [item1,item2]
Usando setLeftBarButtonItem
ousetRightBarButtonItem
let btn1 = UIButton()
btn1.setImage(UIImage(named: "img1"), forState: .Normal)
btn1.frame = CGRectMake(0, 0, 30, 30)
btn1.addTarget(self, action: Selector("action1:"), forControlEvents: .TouchUpInside)
self.navigationItem.setLeftBarButtonItem(UIBarButtonItem(customView: btn1), animated: true);
Para swift> = 2.2, a ação deve ser #selector(Class.MethodName)
... por exemplobtnName.addTarget(self, action: #selector(Class.MethodName), forControlEvents: .TouchUpInside)
let camera = UIBarButtonItem(barButtonSystemItem: .Camera, target: self, action: #selector(Class.MethodName))
É muito mais fácil com
Swift 4
ouSwift 4.2
dentro do seu
ViewDidLoad
método, defina seu botão e adicione-o à barra de navegação.então você precisa definir a função que você mencionou dentro do parâmetro de ação como abaixo
Você precisa adicionar o
@objc
prefixo, pois ele ainda está usando o material herdado (Objetivo C).fonte
Basta configurar
UIBarButtonItem
com o customViewPor exemplo:
ou use
setFunction
:fonte
Acabei de me deparar com esta pergunta e aqui está uma atualização para Swift 3 e iOS 10:
Definitivamente, é muito mais rápido do que criar o UIButton com todas as propriedades e, posteriormente, adicionar o customView ao UIBarButtonItem.
E se você deseja alterar a cor da imagem do azul padrão para, por exemplo, branco, você sempre pode alterar a cor da tonalidade:
PS Você obviamente deve alterar o seletor etc. para o seu aplicativo :)
fonte
No Swift 3.0+,
UIBarButtonItem
configure programaticamente da seguinte maneira:fonte
Definir LeftBarButton com imagem original.
fonte
Tenho o mesmo problema e li as respostas em outro tópico e resolvo de outra maneira semelhante. Não sei qual é mais eficaz. questão semelhante
fonte
Isso é uma coisa louca da maçã. Quando você diz self.navigationItem.rightBarButtonItem.title, ele diz nada enquanto na GUI mostra Edit ou Save. Fresher gosta de mim levará muito tempo para depurar esse comportamento.
Há um requisito de que o Item mostre Editar na primeira carga e o usuário toque nele. Ele será alterado para Salvar título. Para arquivar isso, fiz como abaixo.
// a visualização carregou dirá Editar título
// toque em Editar item mudará para Salvar título
// toque em Salvar item exibirá Editar título
fonte
iOS 11
Configurando um botão personalizado usando restrição:
fonte
fonte