【swift】カスタムUIView上のボタンが押せなくてハマったときのメモ
はじめに
久々にこんなにハマりました、、、
共通で使い回すために作るカスタムUIVIew上のボタンを押してもウンともスンともいわなかったことでした
コードは以下のような感じで、なんてことはなくボタンを持ってるだけのUIViewをaddSubViewして、見た目的には問題ないのにタップイベントが呼ばれない、、、
カスタムView
CustomView: UIView {
var button = UIButton()
override init(frame: CGRect) {
super.init(frame: frame)
setUp()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setUp()
}
func setData() {
button.frame = CGRectMake(100, 100, 150, 150)
button.setTitle("送信", forState: UIControlState.Normal)
button.addTarget(self, action: "onButton:", forControlEvents: UIControlEvents.TouchUpInside)
addSubview(self.button)
}
func onButton(sender: UIButton) {
// 呼ばれない
}
}呼び出し元ViewController
class ViewController: UIViewController {
var customView: CustomView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
customView = CustomView()
customView.button.addTarget(self, action: "onButton:", forControlEvents: UIControlEvents.TouchUpInside)
view.addSubview(self.customView)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func onButton(sender: UIButton) {
// これも呼ばれない
}
}今日1日近く悩んだあげくこちらの記事を見つけました。まさにここに書いてあるとおりでした
addSubViewしたUIButtonが押せない - 技術系備忘録
カスタムUIViewをaddSubViewするときにサイズをセットしていなかったため、親のビューが邪魔?してたみたいでした、、、
呼び出し元ViewController(修正後)
override func viewDidLoad() {
super.viewDidLoad()
customView = CustomView()
customView.frame = CGRectMake(0, 0, view.frame.size.width, view.frame.size.height) // ★★ コレ!! ★★
customView.button.addTarget(self, action: "onButton:", forControlEvents: UIControlEvents.TouchUpInside)
view.addSubview(self.customView)
}かなり試行錯誤したけどこんな結末とは、、、
以上です