2016-12-15 1 views
1

Neu bei xcode. Ich verwende die folgende Funktion, um eine Anzahl neuer Schaltflächen zu erstellen. Ich möchte einzelne Schaltflächen animieren, nachdem sie erstellt wurden, bin mir aber nicht sicher, wie ich mit der neuen Schaltfläche interagieren soll.In Swift 3 nach dem Erstellen einer Schaltfläche mit einer Funktion, wie ändere ich die Eigenschaften dieser Schaltfläche?

Funktion:

func createButton(buttonTitle: String, xaxis: Double, yaxis: Double) { 
    let button = UIButton(type: .system) 
    button.frame = CGRect(x: xaxis, y: yaxis, width: 100.0, height: 30.0) 
    button.setTitle(NSLocalizedString(buttonTitle, comment: buttonTitle), for: .normal) 
    button.layer.cornerRadius = 0.05 * button.bounds.size.width 
    button.clipsToBounds = true 
    button.backgroundColor = .gray 
    button.setTitleColor(.white, for: .normal) 
    button.adjustsImageWhenHighlighted = true 

    button.addTarget(self, action: #selector(self.buttonAction(sender:)), for: .touchUpInside) 
    view.addSubview(button) 
} 
+1

Sie sollten Taste aus dieser func zurückzukehren und verwenden Sie diese Rückkehr zu schaffen Wert, um damit zu interagieren wie 'let button = createButton (...); button.setTitle ("was auch immer") '. –

+0

Muss ich die neue Variable zuerst als UIButton definieren? Lassen Sie die Taste = UIButton. Schaltfläche = createButton (...)? – SwiftLanding

+1

Eigentlich können Sie gleichzeitig deklarieren und zuweisen. Genau wie ich es oben getan habe. –

Antwort

2

Wie von Nick Allen vorgeschlagen können Sie Ihre Funktion UIButton zurückzukehren

func createButton(buttonTitle: String, xaxis: Double, yaxis: Double) -> UIButton { 
let button = UIButton(type: .system) 
return button 
} 

// ändern - dann die Taste

let button1 = createButton(.....) 
view.addSubview(button1). 
+0

Das hat super funktioniert. Ich habe Probleme, auf Button1 außerhalb der Funktion, wo ich es erstellt habe, zurückzukommen. Ich habe self.view.button1 und view.button1 ohne Erfolg versucht. Irgendwelche Vorschläge, wie man es referenziert? – SwiftLanding

+1

@SwiftLanding wissen Sie, wie viele Schaltflächen Sie erstellen möchten oder ist es dynamisch? Wenn Sie wissen, wie viele Tasten, können Sie die Taste innerhalb des Viewcontrollers außerhalb der Funktion als Variable deklarieren. können Sie so erstellen: var button1: UIButton! – nerezza

1

Wenn Sie nicht wollen, eine Instanzvariable erstellen, einen Knopf zu halten, können Sie einen Tag Ihre Schaltfläche hinzufügen und einen Verweis auf sie später bekommen.

Dazu fügen Tag auf den Knopf:

button.tag = 300 // no other view should have the same tag to avoid issues 

und dann können Sie einfach Ihre Taste von überall im View-Controller wie diese Referenz:

if let button = view.viewWithTag(300) as? UIButton { 
    // change any properties of the button as you would normally do 
    button.setTitle("Updated title", for: .normal) 
} 

Ich würde vorschlagen, Tag definieren Werte in Konstanten an der Spitze der ViewController-Klasse, um die Verwendung von "magischen Zahlen" in Ihrem Code zu vermeiden.

+0

Tag ist für IB reserviert, ich denke nicht, dass die Verwendung eines Tags wie dieser eine gute Übung ist. –

+0

Ich stimme zu einem gewissen Grad zu, aber wenn Sie die Tag-Eigenschaft der Ansicht ** nur ** verwenden, um sie zu identifizieren (keine Art von Daten zu speichern), dann sehe ich es nicht so schlimm. – JPetric

Verwandte Themen