Imagen de botón personalizada sin configurar el marco del botón:
Puede usar init(image: UIImage?, style: UIBarButtonItemStyle, target: Any?, action: Selector?)
para inicializar un nuevo elemento utilizando la imagen especificada y otras propiedades.
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
Mira este documento de Apple. referencia
UIBarButtonItem con imagen de botón personalizada con marco de botón
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
y mayores
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
O simplemente use init (customView :) como
let rightBarButton = UIBarButtonItem(customView: btnName)
self.navigationItem.rightBarButtonItem = rightBarButton
Para el sistema UIBarButtonItem
let camera = UIBarButtonItem(barButtonSystemItem: .Camera, target: self, action: Selector("btnOpenCamera"))
self.navigationItem.rightBarButtonItem = camera
Para configurar más de 1 artículo, use rightBarButtonItems
o para el lado izquierdoleftBarButtonItems
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
osetRightBarButtonItem
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 la acción debe ser #selector(Class.MethodName)
... por ej.btnName.addTarget(self, action: #selector(Class.MethodName), forControlEvents: .TouchUpInside)
let camera = UIBarButtonItem(barButtonSystemItem: .Camera, target: self, action: #selector(Class.MethodName))
Es mucho más fácil con
Swift 4
oSwift 4.2
dentro de su
ViewDidLoad
método, defina su botón y agréguelo a la barra de navegación.entonces necesita definir la función que mencionó dentro del parámetro de acción como se muestra a continuación
Debe agregar el
@objc
prefijo ya que todavía está haciendo uso del material heredado (Objetivo C).fuente
Simplemente configure
UIBarButtonItem
con customViewPor ejemplo:
o usar
setFunction
:fuente
Me topé con esta pregunta y aquí hay una actualización para Swift 3 y iOS 10:
Definitivamente es mucho más rápido que crear el UIButton con todas las propiedades y luego agregar el CustomView al UIBarButtonItem.
Y si desea cambiar el color de la imagen del azul predeterminado a, por ejemplo, blanco, siempre puede cambiar el color del tinte:
PD: obviamente, debe cambiar el selector, etc. para su aplicación :)
fuente
En Swift 3.0+,
UIBarButtonItem
configure programáticamente de la siguiente manera:fuente
Configuración de LeftBarButton con imagen original.
fuente
Tengo el mismo problema y he leído las respuestas en otro tema y luego resuelvo otra forma similar. No sé cuál es más efectivo. problema similar
fuente
Esto es una locura de manzana. Cuando diga self.navigationItem.rightBarButtonItem.title, dirá nil mientras que en la GUI muestra Editar o Guardar. A Fresher le gusto. Tomará mucho tiempo depurar este comportamiento.
Existe el requisito de que el elemento muestre Editar en la primera carga y luego el usuario lo toque. Cambiará a Guardar título. Para archivar esto, hice lo siguiente.
// la vista se cargó dirá Editar título
// toque Editar elemento cambiará a Guardar título
// toca Guardar elemento mostrará Editar título
fuente
iOS 11
Establecer un botón personalizado con restricción:
fuente
fuente