I placed a UIControl in a UIView,and set the UIView as the UITextField.rightView,but the UIControl then doesnot call actions for controlEvents I added like:[control addTarget:self action:@selector(searchButtonClicked) forControlEvents:UIControlEventTouchUpInside].If I change the UIControl to a UIButton, it works well, but I has to use UIControl for some reason.Any one know the reason and solution? I'm using xcode 14.0 on iOS 16.1
import UIKit
class DemoControl: UIControl { }
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(searchBar)
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
let searchView = UIView(frame: CGRect(x: 0, y: 0, width: demoControl.frame.width, height: demoControl.frame.height))
searchView.addSubview(demoControl)
searchBar.searchTextField.rightViewMode = .always
searchBar.searchTextField.rightView = searchView
}
private lazy var searchBar: UISearchBar = {
let view = UISearchBar(frame: CGRect(x: 0, y: 100, width: UIScreen.main.bounds.width - 24, height: 36))
return view
}()
private lazy var demoControl: DemoControl = {
let control = DemoControl(frame: CGRect(x: 0, y: 0, width: 52, height: 24))
control.layer.cornerRadius = 12
control.backgroundColor = .red
control.addTarget(self, action: #selector(controlAction), for: .touchUpInside)
return control
}()
private lazy var demoButton: UIButton = {
let control = UIButton(frame: CGRect(x: 0, y: 0, width: 52, height: 24))
control.layer.cornerRadius = 12
control.backgroundColor = .red
control.addTarget(self, action: #selector(controlAction), for: .touchUpInside)
return control
}()
@objc private func controlAction() {
print("Click!!!")
}
}