Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Custom UIView addTarget?

I am creating a custom UIView. I am wondering how can I replicate the UIButton behavior on this UIView.

I would like to be able to call addTarget to it like an UIButton.

I know that I can subclass UIControl and call

self.sendActionsForControlEvents(UIControlEvents.TouchUpInside);

but I would like to do it on an UIView since I am designing it on a XIB file.

like image 491
JayVDiyk Avatar asked Nov 02 '15 06:11

JayVDiyk


4 Answers

There is an easy way to achieve this.

  1. Go to Interface builder of your class
  2. Select the view u want to add action
  3. open IDENTITY INSPECTOR, change class from UIView to 'UIControl'.

Now u can add any IBAction method to this view.

Its working like charm. happy coding. hope it may help

Update

its working in xCode 10.1 and swift 4+

like image 80
Subhash Sharma Avatar answered Nov 14 '22 13:11

Subhash Sharma


This will be better if we talking about swift3 or swift 4

let gesture:UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(targetViewDidTapped))
gesture.numberOfTapsRequired = 1
targetView?.isUserInteractionEnabled = true
targetView?.addGestureRecognizer(gesture)
like image 43
daxh Avatar answered Nov 14 '22 13:11

daxh


you can use UITapGestureRecognizer, add it on view programmatically as follows

self.userInteractionEnabled = true
let gesture:UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(viewTapped))
gesture.numberOfTapsRequired = 1
self.addGestureRecognizer(gesture)

and implement the selector, You can also add gesture to view using xib or Interface Builder file.

like image 38
Saif Avatar answered Nov 14 '22 12:11

Saif


In Swift 4 there is new syntax of init UITapGestureRecognizer:

let gesture:UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: Selector("viewTapped:"))
// or declare like this
let gesture:UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(YourClass.viewTapped(gesture:)))
yourView.addGestureRecognizer(gesture)
like image 6
Agisight Avatar answered Nov 14 '22 13:11

Agisight