ios - ¿Cómo usar UIButton como botón de alternar?
iphone rubymotion (5)
Mi lógica más fácil para cambiar la imagen del botón. :)
(IBAction)toggleButton:(id)sender {
if (self.toggleButton.selected==YES) {
[self.toggleButton setSelected:NO];
}else{
[self.toggleButton setSelected:YES];
[self.toggleButton setImage:[UIImage imageNamed:@"favStar.png"] forState:UIControlStateSelected];
}
Estoy tratando de crear un botón de alternar para cada celda en mi tabla. Cuando se presiona, cambiará la imagen y cuando se vuelva a presionar, cambiará la imagen nuevamente - Conmutar.
En la clase UIButton
no veo un estado selected
.
Estoy buscando una manera de crear un botón de alternar con UIButton para poder cambiar el estado en cada clic.
Así es como lo estoy haciendo en rubymotion
en este momento usando rmq
@fav_button.on(:touch) do |sender|
puts "pressed fav button for id: " + data[:id] + " and name: " + data[:name]
#how do I change the state here?
end
Puede crear un botón de alternar fácilmente, solo necesita configurar las imágenes respectivas para los estados respectivos, después de eso, puede usar la propiedad selected
para alternar entre estas imágenes.
Hice un código de objetivo puro para mostrar cómo puedes hacerlo, pero también puedes configurar las imágenes en Storyboards ou Xibs, mira:
// First, set the images for normal state and selected state
[button setImage:normalImage forState:UIControlStateNormal];
[button setImage:selectedImage forState:UIControlStateSelected];
// Don''t forget to add an action handler to toggle the selected property
[button addTarget:self action:@selector(buttonTouch:withEvent:) forControlEvents:UIControlEventTouchUpInside];
// Now, in your button action handler, you can do something like this:
- (void)buttonTouch:(UIButton *)aButton withEvent:(UIEvent *)event
{
aButton.selected = !aButton.selected;
}
Espero que esto pueda ayudarte.
Puedes hacerlo de una manera muy fácil. En primer lugar, en su etiqueta viewDidLoad
set para su botón. Digamos self.toggleButton.tag = 111
. Ahora en la función de acción de tu botón, puedes alternar el botón como:
- (IBAction)toggling:(id)sender{
if(self.toggleButton.tag == 111){
//this is normal state
[self.toggleButton setTitle:@"Less..." forState:UIControlStateNormal];
self.toggleButton.tag = 222;
}else{
//selected state
[self.toggleButton setTitle:@"More..." forState:UIControlStateNormal];
self.toggleButton.tag = 111;
}
}
Puede cambiar la imagen del botón de esta manera [self.toggleButton setImage://some image forState:UIControlStateNormal];
Es la forma más fácil que pienso. Espero que ayude.
Solución Swift 4.0 (usando Storyboards)
Primero, asegúrese de que el Tipo de UIButton
esté configurado en Custom
en el Inspector de atributos.
// Reference to UIButton in Storyboard
@IBOutlet weak var toggleButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
// assumes you have two images in the bundle/project
// called normal.png and selected.png.
let normalImage = UIImage(named: "normal.png")
let selectedImage = UIImage(named: "selected.png")
toggleButton.setImage(normalImage, for: .normal)
toggleButton.setImage(selectedImage, for: .selected)
}
En la captura de pantalla siguiente se muestra la referencia a toggleButton
en Storyboard y Touch Up Inside
Event, es decir: un usuario que presiona el botón, que dispara el botón didPressButton
continuación.
@IBAction func didPressButton(_ sender: Any) {
// if the button was selected, then deselect it.
// otherwise if it was not selected, then select it.
toggleButton.isSelected = !trackingButton.isSelected
if toggleButton.isSelected {
print("I am selected.")
} else {
print("I am not selected.")
}
}
Ya que su pregunta mencionó rmq, aquí hay una manera rmq de hacerlo:
En viewDidLoad
:
@hello_world_label = rmq.append(UILabel, :hello_world).get
@button = rmq.append(UIButton, :toggleable_button)
@button.on(:touch) do |sender|
sender.selected = !sender.selected?
end
Tenga en cuenta que la conmutación se logra consultando el estado real del botón. Si necesita recordar esto para su uso posterior, puede querer guardarlo en una variable de instancia.
En su hoja de estilo:
def toggleable_button(st)
st.frame = {t: 200, w: 100, h: 24}
st.image_normal = image.resource(''toggle_me'')
st.image_selected = image.resource(''toggled'')
end
Tenga en cuenta el uso de image_selected
. Bueno, esto no existe en rmq, pero puedes hacer que eso suceda con bastante facilidad. Si este es un proyecto rmq, tendrá un directorio de stylers /. Allí, debería ver ui_button_styler.rb. Aquí está el código para hacer que el estado resaltado sea un ciudadano de primera clase:
module RubyMotionQuery
module Stylers
class UIButtonStyler < UIControlStyler
def image_selected=(value)
@view.setImage(value, forState:UIControlStateSelected)
end
def image_selected
@view.imageForState UIControlStateSelected
end
end
end
end
Como puede ver, el código de su controlador permanece limpio, las configuraciones iniciales del botón se desplazan a la hoja de estilo y usted ha extendido cuidadosamente rmq para comprender el estado seleccionado.