Created Keyboard.xib and Keyboard.swift and I launch it in TableViewController
import UIKit protocol KeyboardDelegate: class { func keyWasTapped(character: String) } class Keyboard: UIView { weak var delegate: KeyboardDelegate? @IBOutlet weak var btn1: UIButton! @IBOutlet weak var btn2: UIButton! @IBOutlet weak var btn3: UIButton! @IBOutlet weak var btn4: UIButton! @IBOutlet weak var btn5: UIButton! @IBOutlet weak var btn6: UIButton! @IBOutlet weak var btn7: UIButton! @IBOutlet weak var btn8: UIButton! @IBOutlet weak var btn9: UIButton! @IBOutlet weak var btn10: UIButton! @IBOutlet weak var btn11: UIButton! @IBOutlet weak var btn12: UIButton! required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) initializeSubviews() } override init(frame: CGRect) { super.init(frame: frame) initializeSubviews() } func initializeSubviews() { let xibFileName = "Keyboard" let view = Bundle.main.loadNibNamed(xibFileName, owner: self, options: nil)?[0] as! UIView btn1.clipsToBounds = true btn1.layer.cornerRadius = 5 btn2.clipsToBounds = true btn2.layer.cornerRadius = 5 btn3.clipsToBounds = true btn3.layer.cornerRadius = 5 btn4.clipsToBounds = true btn4.layer.cornerRadius = 5 btn5.clipsToBounds = true btn5.layer.cornerRadius = 5 btn6.clipsToBounds = true btn6.layer.cornerRadius = 5 btn7.clipsToBounds = true btn7.layer.cornerRadius = 5 btn8.clipsToBounds = true btn8.layer.cornerRadius = 5 btn9.clipsToBounds = true btn9.layer.cornerRadius = 5 btn10.clipsToBounds = true btn10.layer.cornerRadius = 5 btn11.clipsToBounds = true btn11.layer.cornerRadius = 5 btn12.clipsToBounds = true btn12.layer.cornerRadius = 5 self.addSubview(view) view.frame = self.bounds } @IBAction func keyTapped(sender: UIButton) { self.delegate?.keyWasTapped(character: sender.currentTitle!) let number = sender.currentTitle! print(number) } } Each button associated with @IBAction func keyTapped(sender: UIButton) Does not help, does not print me currentTilte