9

I know there already are some questions about this but I couldn't find a solution. There is a very simple code that works just fine on one of my projects but not on an another one:

Here is the code for subclass of UIView.

import UIKit

class test : UIView {

    init(frame: CGRect, color: UIColor) {
        super.init(frame: frame)
        self.backgroundColor = color
        self.userInteractionEnabled = true
    }

    required init(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
        super.touchesBegan(touches, withEvent: event)
        var alert = UIAlertView()
        alert.title = "lol"
        alert.message = "lol"
        alert.addButtonWithTitle("Ok")
        alert.show()
    }
}

I'm sure the solution is quite simple but I can't find it.

Mick MacCallum
  • 129,200
  • 40
  • 280
  • 281
La masse
  • 1,190
  • 1
  • 10
  • 24

2 Answers2

14

You need to make sure that userInteractionEnabled is enabled on all of the superviews of your view. If any of the superviews have this property set to false, the touch events won't be processed for them or any of their subviews.

Mick MacCallum
  • 129,200
  • 40
  • 280
  • 281
  • 7
    Not getting desired result, though I have view->scrollview->view layout,and in both views, I have set userInteractionEnabled to true – Sachin Sharma Aug 10 '17 at 13:39
3

Maybe some of the superviews has the userInteractionEnabled set to "false"?

Pavel Smejkal
  • 3,600
  • 6
  • 27
  • 45