ios iphone uibutton rubymotion rmq

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.