Mehrere UIButtons mit selber Funktion, aber mit unterschiedlichen Title, welcher vorher generiert wird!

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Mehrere UIButtons mit selber Funktion, aber mit unterschiedlichen Title, welcher vorher generiert wird!

    Hallo Leute,

    Bin immer noch an meinem kleinem Spiele-Projekt dran und habe eine kleine Frage an die Experten. Stellt euch ein paar UIButtons vor welche in einer Matrix von 6x6 angeordnet sind. Jeder dieser Buttons soll eine Zufallszahl generiert bekommen. Jeder hat aber die selbe Funktion, die da wäre: Beim betätigen des Buttons soll diese die enthaltene Zufallszahl zwischenspeichern, damit ich diese weiter verarbeiten kann.

    Jetzt gibt es ja die Möglichkeit einfach die 36 Buttons als Outlets und als Actions anzulegen, aber dies ist ja ziemlich unschön und zudem noch unübersichtlich. Nun habe ich noch die Möglichkeit gesehen, womit ich die Buttons mit Tags verbinden kann, aber hier habe ich den Nachteil, das ich zwar mit z.B. if Button.tag == 10 { tu dies und das } zwar eine Aktion ausführen kann, aber nicht den Button mit dem Tag etwas zuweisen (z.B. button.setTitle("10", forState: UIControlState.Normal)) kann... (Zumindest habe ich es nicht geschafft). Google konnte mir leider nicht viel helfen, daher frage ich euch, ob es eine schönere Lösung gibt. Vielen Dank im Voraus! :D
    </Danke_für_Alles>
  • Hey,
    als Experte kann ich dir sicherlich nicht dienen... ;)
    ... aber ich würde spontan einfach eine NSView subclassen und dann die MouseEvents per -mouseDown abfangen und ausrechnen, in welches Feld man geklickt hat. Oder, wenn es unbedingt Buttons sein sollen, diese programmatisch erzeugen.
    Viel Erfolg...
  • Osxer schrieb:

    Hey,
    als Experte kann ich dir sicherlich nicht dienen... ;)
    ... aber ich würde spontan einfach eine NSView subclassen und dann die MouseEvents per -mouseDown abfangen und ausrechnen, in welches Feld man geklickt hat. Oder, wenn es unbedingt Buttons sein sollen, diese programmatisch erzeugen.
    Viel Erfolg...
    Glaub hier geht's um iOS ;)
  • @Osxer Dies ist wohl nicht die beste Idee dafür, da ich 1. beim Button direkt das ActionEvent inklusive habe, 2. wird der Title immer wieder verändert

    @gritsch Ich weiß nicht wie ich das am Besten einsetze!?

    Quellcode

    1. buttons.viewWithTag(IrgendeinButton).setTitle("RandomZahl", forState: UIControlState.Normal)
    @MCDan Das hört sich irgendwie nach dem an was ich suche. Wie funktionieren die Collection? Über eine ID?

    @matz Ja das ist richtig!
    </Danke_für_Alles>
  • gritsch schrieb:

    naja, du kannst ja alle subviews durchgehen und einen tag setzen (reihenfolge im BT beachten) oder eben im BT bereits die tags setzen und mit der genannten methode dann den button holen den du haben möchtest.
    Wie werden Subviews denn erstellt? Lassen die sic genau so handlen wie Buttons? Wie sieht es mit der Performance aus, das sich dies aufwendiger und größer anhört als ein Button. Hast du vielleicht ein Codebeispiel, wie du es lösen würdest?
    </Danke_für_Alles>
  • Okay, aber mache ich nun, und das ist die Kernfrage, wenn ich eine Funktion createNewRandomNumber() nutzen möchte, die jetzt alle Buttons mit einer unterschiedlichen Zufallszahl im Title belegt. Wie kann ich den einzelnen Button erreichen bzw. ansprechen? Scheinbar muss ich doch einfach jede Action und alle Outlets einzeln erstellen, oder wofür sind diese Outlet-Collections?
    </Danke_für_Alles>
  • Ich kenn mich IOS nicht aus, aber vielleicht ja so:

    Quellcode

    1. import UIKit
    2. class ViewController: UIViewController {
    3. override func viewDidLoad() {
    4. super.viewDidLoad()
    5. var x, y: CGFloat
    6. var tagIndex: Int
    7. x = 10
    8. y = 100
    9. tagIndex = 0
    10. for i in 1...6 {
    11. for k in 1...6 {
    12. tagIndex += 1
    13. var button = UIButton(frame: CGRectMake(x, y, 50, 50))
    14. button.setTitle(String(createNewRandomNumber()), forState: UIControlState.Normal)
    15. button.backgroundColor = UIColor.blackColor()
    16. button.tag = tagIndex
    17. button.addTarget(self, action: "buttonAction:", forControlEvents: UIControlEvents.TouchUpInside)
    18. self.view.addSubview(button)
    19. x += 60
    20. }
    21. x = 10
    22. y += 60
    23. }
    24. }
    25. override func didReceiveMemoryWarning() {
    26. super.didReceiveMemoryWarning()
    27. // Dispose of any resources that can be recreated.
    28. }
    29. func createNewRandomNumber() -> Int {
    30. return random() % 100
    31. }
    32. func buttonAction(button: UIButton) -> () {
    33. println("Tag: \(button.tag) Value: \(button.titleForState(UIControlState.Normal))")
    34. }
    35. }
    Alles anzeigen
    Bildschirmfoto 2015-06-09 um 14.40.13.png
    Manchmal schleiche ich mich mitten in der Nacht an meinen Wecker heran und brülle: "NA, WIE FÜHLT SICH DAS AN!!!"
  • Ja so ähnlich hatte ich es auch, nur mit dem Unterschied das ich es mit dem Builder gemacht habe:

    Quellcode

    1. func setButtonTitle() {
    2. for var index = 0; index < 36; index++ {
    3. gameButton.setTitle(String(Game.buttonTitle[(index)]), forState: UIControlState.Normal)
    4. }

    Bei meinem Projekt geht es halt darum, dass wenn ich einen Button drücke, soll dieser gehighlighted werden. Wenn nun ein zweiter Button gedrückt wird, soll ein Ergebnis überprüft werden -> wenn dies richtig ist, bekommen beide Button eine neue Zufallszahl. Und genau hier steh ich auf dem Schlauch. Ich suche irgendwie so eine Funktion:

    Quellcode

    1. func setButtonTitle() {
    2. for var index = 0; index < 36; index++ {
    3. gameButton.tag[index].setTitle(String(Game.buttonTitle[(index)]), forState: UIControlState.Normal)
    4. }
    Nur geht das natürlich nicht.

    @gritsch Das Projekt ist nur eine Testprojekt, mit dem ich Swift lernen möchte. 8)
    </Danke_für_Alles>
  • Vielleicht nicht elegant aber Funktionel:

    Quellcode

    1. class ViewController: UIViewController {
    2. var button1: UIButton!
    3. var button2: UIButton!
    4. override func viewDidLoad() {
    5. ......
    6. func buttonAction(button: UIButton) -> () {
    7. if button1 == nil {
    8. button1 = button
    9. }
    10. if button1 != nil && button1 != button && button2 == nil {
    11. button2 = button
    12. println("Mach irgendwas")
    13. button1.setTitle(String(createNewRandomNumber()), forState: UIControlState.Normal)
    14. button2.setTitle(String(createNewRandomNumber()), forState: UIControlState.Normal)
    15. button1 = nil
    16. button2 = nil
    17. }
    18. }
    19. }
    Alles anzeigen
    Manchmal schleiche ich mich mitten in der Nacht an meinen Wecker heran und brülle: "NA, WIE FÜHLT SICH DAS AN!!!"