user1282637 user1282637 -3 years ago 172
iOS Question

Custom UIButton - IBAction not working

I have a default UIButton linked to an IBAction (touch up inside). This works fine, so I know my connection is OK. Once I change the UIButton class to my custom button, the IBAction is no longer triggered. Below is the code for my custom UIButton. Any ideas why this is happening?

import UIKit

class PrimaryButton: UIButton {

override init(frame: CGRect) {
super.init(frame: frame)

required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)

private func initView() {
let view = viewFromNibForClass()

view.frame = bounds

view.autoresizingMask = [


private func viewFromNibForClass() -> UIView {
let bundle = Bundle(for: type(of: self))
let nib = UINib(nibName: String(describing: type(of: self)), bundle: bundle)
let view = nib.instantiate(withOwner: self, options: nil).first as! UIView

return view

Answer Source

Your code does not work because a button does not receive touches anymore. All touches are sent to the topmost custom view you add.

Set view.userInteractionEnabled = false to make it transparent to touches.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download