2015-04-05 9 views
19

Próbuję programowo UIView s programowo. Jak uzyskać UIButton z funkcją akcji w Swift?Tworzenie programowego UIButtona

Poniższy kod nie otrzyma żadnych działań:

let btn: UIButton = UIButton(frame: CGRectMake(100, 400, 100, 50)) 
btn.backgroundColor = UIColor.greenColor() 
btn.setTitle("Click Me", forState: UIControlState.Normal) 
btn.addTarget(self, action: "buttonAction:", forControlEvents: UIControlEvents.TouchUpInside) 
self.view.addSubview(buttonPuzzle) 

Poniższa funkcja jest selektor:

func buttonAction(sender: UIButton!) { 
    var btnsendtag: UIButton = sender 
} 

Odpowiedz

31

Jesteś brakującym który UIButton tego jest. Aby to zrekompensować, zmień jego właściwość tag.
Oto odpowiesz:

let btn: UIButton = UIButton(frame: CGRectMake(100, 400, 100, 50)) 
btn.backgroundColor = UIColor.greenColor() 
btn.setTitle("Click Me", forState: UIControlState.Normal) 
btn.addTarget(self, action: "buttonAction:", forControlEvents: UIControlEvents.TouchUpInside) 
btn.tag = 1    // change tag property 
self.view.addSubview(btn) // add to view as subview 

Swift 3,0

let btn: UIButton = UIButton(frame: CGRect(x: 100, y: 400, width: 100, height: 50)) 
btn.backgroundColor = UIColor.green 
btn.setTitle(title: "Click Me", for: .normal) 
btn.addTarget(self, action: #selector(buttonAction), forControlEvents: .touchUpInside) 
btn.tag = 1    
self.view.addSubview(btn) 

Oto funkcja przykład selektor:

func buttonAction(sender: UIButton!) { 
    var btnsendtag: UIButton = sender 
    if btnsendtag.tag == 1 {    
     //do anything here 
    } 
} 
+0

Dziękuję działać mi –

+2

Jeśli sender.tag == 1 {...} –

1

Trzeba addSubview i tagu na to btn.

8

Używanie tagu to kruche rozwiązanie. Masz widok i tworzysz i dodanie przycisku do tego widoku, po prostu trzeba zachować odniesienie do niej: Na przykład

W swojej klasie, zachować odniesienie do przycisku

var customButton: UIButton! 

Utwórz przycisk i ustawić odniesienie

let btn = UIButton(frame: CGRect(x: 100, y: 400, width: 100, height: 50)) 
btn.backgroundColor = .greenColor() 
btn.setTitle("Click Me", forState: .Normal) 
btn.addTarget(self, action: #selector(MyClass.buttonAction), forControlEvents: .TouchUpInside) 
self.view.addSubview(btn) 
customButton = btn 

test przed tym przypadku w funkcji działania

func buttonAction(sender: UIButton!) { 
    guard sender == customButton else { return } 

    // Do anything you actually want to do here 
} 
+1

bardzo drobne, ale zapomniał o spacji po 'btn' i przed' = 'tutaj:' niech btn = UIButton. ..' – damianesteban

+0

Dzięki, naprawione teraz. – Abizern