Swift UILabel上にaddSubviewしたUIButtonが反応しない


結論

UILabel.isUserInteractionEnabled = trueが必要

概要

例えばこんなタグ風UIで削除ボタンを設置したのだけど、ボタンが反応しない...

f:id:letitride:20190821122833p:plain


private func makeAddressLabel(){
    addressLabel.text = "サンフランシスコ Taylor St627付近"
    addressLabel.sizeToFit()
    
    let deleteAddressButton = UIButton(frame: CGRect(x: addressLabel.frame.size.width, y: 0, width:addressLabel.frame.size.height, height: addressLabel.frame.size.height))
    deleteAddressButton.setTitle("✖️", for: .normal)
    deleteAddressButton.addTarget(self, action: #selector(addressCancelButton), for: .touchUpInside)
    addressLabel.frame.size.width += addressLabel.frame.size.height
    //これがないと反応しない...
    addressLabel.isUserInteractionEnabled = true
    addressLabel.addSubview(deleteAddressButton)
}


それでも反応しない時は、buttonのサイズがlabel(親View)からはみ出してるケースなんかを疑おう。