Custom UIView addTarget?
Asked Answered
S

4

9

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.

Silverstein answered 2/11, 2015 at 6:43 Comment(1)
Add UIControl with custom view bounds with Backgound color clear then add target that UIControl otherwise add TapGesture to the ViewImpulsion
A
16

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+

Apodosis answered 2/11, 2015 at 6:51 Comment(4)
this is brilliant and much nicer than the other solutions. it's easy to create a custom button this way, just as an example. This should be the correct answer because the touchUpInsideEvent was requested in the questionMiltie
great answer.. except that it assumes that everyone uses storybuilder to build UI. False.Bysshe
This is brilliant, and it does work without IB, if you just declare your class to inherit from UIControl instead of UIView, you can call addTarget!Felafel
@Felafel you're right, its your choice to use IB or call addTarget!! Cheers happy coding.Apodosis
C
10

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)
Cattier answered 19/12, 2017 at 7:42 Comment(0)
M
8

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.

Mismatch answered 2/11, 2015 at 6:49 Comment(0)
S
6

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)
Skimp answered 18/7, 2018 at 11:55 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.