2016-10-02 1 views
12

Ich habe eine UIButton mit Swift 3 erstellt und ich möchte es einige Nachricht drucken, wenn es gedrückt wird.Stuck mit Hinzufügen von Ziel zu Schaltfläche in Swift 3 programmgesteuert

Also habe ich so etwas wie dieses: In Loadview()

button.addTarget(self, action: #selector(ViewController.pressButton(button:)), for: .touchUpInside) 

Verfahren:

func pressButton(button: UIButton) { 

    NSLog("pressed!") 

} 

Aber es passiert nichts, wenn ich auf die Schaltfläche klicken.

+0

Haben Sie die Lösung erhalten? –

+0

Sieht so aus, als ob Sie die Funktion aufrufen, die sich in ViewController befindet, aber Ihr Ziel ist self. Wenn Sie dies von einem anderen ViewController aus versuchen, muss self ViewController sein. – Bobby

Antwort

0

Sie erwähnen, dass der Anruf addTarget in loadView() ist. Ist dies in Ihrer benutzerdefinierten Unteransicht oder in der ViewController?

Von Ihrem Selektor zielt es auf eine Methode in Ihrer ViewController Klasse, aber wenn die target für diese Aktion die Ansicht selbst ist, dann würde es Sinn machen, dass die Aktion nicht durchläuft.

Wenn Sie Ihre Schaltfläche in einem ViewController deklarieren, und in viewDidLoad dieses Ziel wie oben hinzufügen, sollte die Nachricht gedruckt werden, wie Sie suchen. Ich glaube, dass du die falsche Klasse mit deiner Aktion "anvisierst".

+0

Der gesamte Code befindet sich im View-Controller. – user234159

+0

Also was ruft 'loadView()' auf? Dies ist keine standardmäßige View Controller-Lebenszyklusmethode. Es ist eine Standardansichtslebenszyklusmethode. – BHendricks

+0

Der gesamte Code befindet sich in einem View-Controller mit dem Namen "ViewController". Gibt es einen Unterschied zwischen dem Aufruf von addTarget in loadView() und viewDidLoad()? – user234159

17

die Schaltfläche Code in Ihre viewDidLoad hinzufügen und es wird für Sie arbeiten:

override func viewDidLoad() { 
    super.viewDidLoad() 
    let button = UIButton(frame: CGRect(x: 10, y: 10, width: 100, height: 100)) 
    button.backgroundColor = UIColor.gray 
    button.addTarget(self, action: #selector(pressButton(button:)), for: .touchUpInside) 
    self.view.addSubview(button) 
} 

func pressButton(button: UIButton) { 
    NSLog("pressed!") 
} 

Sie brauchen, dont ViewController.pressButton zu selector hinzuzufügen, es ist mit dem function name genug.

Swift 4.x-Version:

let button = UIButton(frame: CGRect(x: 10, y: 10, width: 100, height: 100)) 
button.backgroundColor = .gray 
button.tag = 0 
button.addTarget(self, action: #selector(pressButton(_:)), for: .touchUpInside) 
self.view.addSubview(button) 

@objc func pressButton(_ button: UIButton) { 
    print("Button with tag: \(button.tag) clicked!") 
} 
6

versuchen, dies in swift3!

button.addTarget(self, action: #selector(self.pressButton(button:)), for: .touchUpInside) 

@objc func pressButton(button: UIButton) { NSLog("pressed!") } 
3

In swift 3 Verwendung diesen -

object?.addTarget(objectWhichHasMethod, action: #selector(classWhichHasMethod.yourMethod), for: someUIControlEvents) 

Zum Beispiel (aus meinem Code) -

self.datePicker?.addTarget(self, action:#selector(InfoTableViewCell.datePickerValueChanged), for: .valueChanged) 

Nur ein : nach Methodennamen geben, wenn Sie den Absender als Parameter wollen.

4

Verwenden Sie den folgenden Code.

button.addTarget(self, action: #selector(FirstViewController.cartButtonHandler), for: .touchUpInside) 

Ihre Klassennamen entspricht FirstViewController

Und Ihre Wähler entspricht der folgenden Funktion

func cartButtonHandler() { 

} 
0
let cancelButton = UIButton.init(frame: CGRect(x: popUpView.frame.size.width/2, y: popUpView.frame.size.height-20, width: 30, height: 30)) 
     cancelButton.backgroundColor = UIColor.init(patternImage: UIImage(named: cancelImage)!) 
     cancelButton.addTarget(self, action: #selector(CommentsViewController.canceled), for:.touchUpInside) 
0
  1. Fügen Sie die Schaltfläche Code in override func viewDidLoad() Methode
  2. Machen Sie Ihre Action-Handler markiert sicher mit @IBAction wie folgt aus:

    @IBAction func Druckknopf (Taste: UIButton) {(! "Gedrückt") Druck }

Dann wird es funktionieren!

Verwandte Themen