Swift, событие касания UIView в регуляторе
Как я могу добавить действие UIView touchbegin или действие touchend программно, поскольку Xcode не предоставляет из Main.раскадровка?
7 ответов:
нужно добавить его через код. Попробуйте это:
// 1.create UIView programmetically var myView = UIView(frame: CGRectMake(100, 100, 100, 100)) // 2.add myView to UIView hierarchy self.view.addSubview(myView) // 3. add action to myView let gesture = UITapGestureRecognizer(target: self, action: "someAction:") // or for swift 2 + let gestureSwift2AndHigher = UITapGestureRecognizer(target: self, action: #selector (self.someAction (_:))) self.myView.addGestureRecognizer(gesture) func someAction(sender:UITapGestureRecognizer){ // do other task } // or for Swift 3 func someAction(_ sender:UITapGestureRecognizer){ // do other task } // or for Swift 4 @objc func someAction(_ sender:UITapGestureRecognizer){ // do other task }
обновление для Swift 4:
let gesture = UITapGestureRecognizer(target: self, action: #selector(self.checkAction)) self.myView.addGestureRecognizer(gesture) @objc func checkAction(sender : UITapGestureRecognizer) { // Do what you want }
обновление для Swift 3:
let gesture = UITapGestureRecognizer(target: self, action: #selector(self.checkAction(sender:))) self.myView.addGestureRecognizer(gesture) func checkAction(sender : UITapGestureRecognizer) { // Do what you want }
обновление ответа @Crashalot для Swift 3.x:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { if let touch = touches.first { let currentPoint = touch.location(in: self) // do something with your currentPoint } } override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { if let touch = touches.first { let currentPoint = touch.location(in: self) // do something with your currentPoint } } override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { if let touch = touches.first { let currentPoint = touch.location(in: self) // do something with your currentPoint } }
обновление ответа @Chackle для Swift 2.x:
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { if let touch = touches.first { let currentPoint = touch.locationInView(self) // do something with your currentPoint } } override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) { if let touch = touches.first { let currentPoint = touch.locationInView(self) // do something with your currentPoint } } override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) { if let touch = touches.first { let currentPoint = touch.locationInView(self) // do something with your currentPoint } }
положите это в ваш
UIView
подкласс (это проще всего, если вы делаете подкассу для этой функции).class YourView: UIView { //Define your initialisers here override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { if let touch = touches.first as? UITouch { let currentPoint = touch.locationInView(self) // do something with your currentPoint } } override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent) { if let touch = touches.first as? UITouch { let currentPoint = touch.locationInView(self) // do something with your currentPoint } } override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) { if let touch = touches.first as? UITouch { let currentPoint = touch.locationInView(self) // do something with your currentPoint } } }
для swift 4
@IBOutlet weak var someView: UIView! let gesture = UITapGestureRecognizer(target: self, action: #selector (self.someAction (_:))) self.someView.addGestureRecognizer(gesture) @objc func someAction(_ sender:UITapGestureRecognizer){ print("view was clicked") }
просто обновление выше ответов:
Если вы хотите видеть изменения в событии click, т. е. цвет вашего UIView shud изменяется всякий раз, когда пользователь нажимает UIView, а затем вносит изменения, как показано ниже...
class ClickableUIView: UIView { override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { if let touch = touches.first { let currentPoint = touch.locationInView(self) // do something with your currentPoint } self.backgroundColor = UIColor.magentaColor()//Color when UIView is clicked. } override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) { if let touch = touches.first { let currentPoint = touch.locationInView(self) // do something with your currentPoint } self.backgroundColor = UIColor.magentaColor()//Color when UIView is clicked. } override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) { if let touch = touches.first { let currentPoint = touch.locationInView(self) // do something with your currentPoint } self.backgroundColor = UIColor.whiteColor()//Color when UIView is not clicked. }//class closes here
кроме того, вызовите этот класс из Storyboard & ViewController как:
@IBOutlet weak var panVerificationUIView:ClickableUIView!