Swift 3を使用してUIButtonを作成しました。UIButtonが押されたときにメッセージを出力したいです。
だから私はこのようなことをしました:loadView()で
button.addTarget(self, action: #selector(ViewController.pressButton(button:)), for: .touchUpInside)
方法:
func pressButton(button: UIButton) {
NSLog("pressed!")
}
しかし、ボタンをクリックしても何も起こりません。
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.pressButton
をselector
に追加する必要はありません。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!")
}
swift3でこれを試してください!
button.addTarget(self, action: #selector(self.pressButton(button:)), for: .touchUpInside)
@objc func pressButton(button: UIButton) { NSLog("pressed!") }
次のコードを使用します。
button.addTarget(self, action: #selector(FirstViewController.cartButtonHandler), for: .touchUpInside)
クラス名はFirstViewControllerに対応します
そして、あなたのセレクタは次の関数に対応します
func cartButtonHandler() {
}
In Swift 3これを使用-
object?.addTarget(objectWhichHasMethod, action: #selector(classWhichHasMethod.yourMethod), for: someUIControlEvents)
たとえば(私のコードから)-
self.datePicker?.addTarget(self, action:#selector(InfoTableViewCell.datePickerValueChanged), for: .valueChanged)
:
送信者をパラメーターとして使用する場合は、メソッド名の後に。
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)
addTarget
呼び出しはloadView()
にあることに言及しています。これは、カスタムサブビュー、何らかの種類、またはviewControllerにありますか?
セレクタからは、ViewController
クラスのメソッドをターゲットにしていますが、このアクションのtarget
がビュー自体である場合、アクションが実行されていないことは理にかなっています。
ViewControllerでボタンを宣言し、viewDidLoad
で上記のようにこのターゲットを追加すると、探しているとおりにメッセージが出力されます。あなたはあなたの行動で間違ったクラスを「ターゲット」にしていると思います。
override func viewDidLoad()
メソッドにボタンコードを追加しますアクションハンドラーが次のように@IBActionでタグ付けされていることを確認してください。
@IBAction func pressButton(button:UIButton){print( "pressed!")}
その後、動作します!