UIControl in UITextField.rightView doesnot call actions for controlEvents

39 Views Asked by At

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!!!")
}

}

0

There are 0 best solutions below