web-dev-qa-db-ja.com

Swift 3のプログラムでボタンにターゲットを追加するとスタックする

Swift 3を使用してUIButtonを作成しました。UIButtonが押されたときにメッセージを出力したいです。

だから私はこのようなことをしました:loadView()で

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

方法:

func pressButton(button: UIButton) {

    NSLog("pressed!")

}

しかし、ボタンをクリックしても何も起こりません。

16
user234159

viewDidLoadにボタンコードを追加してください。

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!")
}

ViewController.pressButtonselectorに追加する必要はありません。function nameで十分です。

Swift 4.xバージョン:

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!")
}
27
Rashwan L

swift3でこれを試してください!

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

@objc func pressButton(button: UIButton) { NSLog("pressed!") }
6
Otis Lee

次のコードを使用します。

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

クラス名はFirstViewControllerに対応します

そして、あなたのセレクタは次の関数に対応します

func cartButtonHandler() {

}
5
arango_86

In Swift 3これを使用-

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

たとえば(私のコードから)-

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

:送信者をパラメーターとして使用する場合は、メソッド名の後に。

3
Nikhil Manapure
 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
Divya Rayapati

addTarget呼び出しはloadView()にあることに言及しています。これは、カスタムサブビュー、何らかの種類、またはviewControllerにありますか?

セレクタからは、ViewControllerクラスのメソッドをターゲットにしていますが、このアクションのtargetがビュー自体である場合、アクションが実行されていないことは理にかなっています。

ViewControllerでボタンを宣言し、viewDidLoadで上記のようにこのターゲットを追加すると、探しているとおりにメッセージが出力されます。あなたはあなたの行動で間違ったクラスを「ターゲット」にしていると思います。

0
BHendricks
  1. override func viewDidLoad()メソッドにボタンコードを追加します
  2. アクションハンドラーが次のように@IBActionでタグ付けされていることを確認してください。

    @IBAction func pressButton(button:UIButton){print( "pressed!")}

その後、動作します!

0
SpkingR