it-swarm.com.de

Wie benutze ich UIButton als Toggle Button?

Ich versuche, eine Umschaltfläche für jede Zelle in meiner Tabelle zu erstellen. Wenn Sie drücken, wird das Bild geändert, und wenn Sie es erneut drücken, wird das Bild erneut geändert - Toggle. 

In der UIButton-Klasse sehe ich keinen selected-Zustand. 

Ich suche nach einer Möglichkeit, eine Umschaltfläche mit UIButton zu erstellen, damit ich den Status bei jedem Klick ändern kann. 

So mache ich es jetzt in rubymotion mit 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
20
Anthony

Sie können die Umschaltfläche einfach erstellen. Sie müssen lediglich die entsprechenden Bilder für den jeweiligen Status festlegen. Anschließend können Sie mit der selected-Eigenschaft zwischen diesen Bildern wechseln.

Ich habe einen reinen Ziel-C-Code erstellt, um zu zeigen, wie Sie das tun können, aber Sie können die Bilder trotzdem in Storyboards oder Xibs einstellen.

// 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;
}

Ich hoffe das kann dir helfen.

37
Jan Cássio

Swift 4.0-Lösung (mit Storyboards)

Stellen Sie zunächst sicher, dass der Typ UIButton im Attribut-Inspektor auf Custom gesetzt ist.

 Ensure UIButton Type is set to Custom

// 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)
}

Der folgende Screenshot zeigt den Verweis auf toggleButton im Storyboard und Touch Up Inside Event, dh ein Benutzer, der auf die Schaltfläche tippt, wodurch didPressButton unten ausgelöst wird.

 enter image description here

@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.")
    }
}
3
JaredH

Da Ihre Frage rmq bereits erwähnt hat, können Sie dies folgendermaßen tun:

In 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

Beachten Sie, dass das Umschalten durch Abfragen des aktuellen Status der Schaltfläche erreicht wird. Wenn Sie sich dies zur späteren Verwendung merken müssen, können Sie dies in einer Instanzvariablen speichern.

In Ihrem Stylesheet:

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

Beachten Sie die Verwendung von image_selected. Nun, das gibt es in rmq nicht, aber das kann man ganz leicht machen. Wenn es sich um ein rmq-Projekt handelt, haben Sie ein Verzeichnis stylers /. Dort sollten Sie ui_button_styler.rb sehen. Hier ist der Code, um den hervorgehobenen Staat zu einem erstklassigen Bürger zu machen:

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

Wie Sie sehen, bleibt Ihr Controller-Code sauber, die Anfangseinstellungen der Schaltfläche werden in das Stylesheet verschoben und Sie haben rmq sorgfältig erweitert, um den ausgewählten Status zu verstehen.

1
Steve Ross

Sie können es auf eine sehr einfache Weise tun. Zunächst einmal in Ihrem viewDidLoad Set-Tag für Ihre Schaltfläche. Sagen wir self.toggleButton.tag = 111. Jetzt können Sie in Ihrer Tastenaktionsfunktion die Schaltfläche wie folgt umschalten:

- (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;
    }
}

Sie können das Bild der Schaltfläche wie folgt ändern [self.toggleButton setImage://some image forState:UIControlStateNormal];. Dies ist die einfachste Art, wie ich denke. Ich hoffe es wird helfen. 

0

Meine einfachste Logik zum Umschalten des Tastenbildes. :) 

(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];
       }
0
Hic Up