代码之家  ›  专栏  ›  技术社区  ›  fs_tigre

错误:点击UISegmentedControl时将无法识别的选择器发送到实例

  •  0
  • fs_tigre  · 技术社区  · 6 年前

    知道我做错了什么吗?

    错误:

    import UIKit
    
    class MySegmentControl: UISegmentedControl {
    
        var actionName:Selector
        init(actionName: Selector) {
            self.actionName = actionName
    
            super.init(frame: .zero)
    
            insertSegment(withTitle: "Two", at: 0, animated: false)
            insertSegment(withTitle: "One", at: 1, animated: false)
    
            self.selectedSegmentIndex = 0
    
            self.layer.cornerRadius = 5.0
            self.backgroundColor = UIColor.red
            self.layer.borderWidth = 1
            self.layer.borderColor = UIColor.blue.cgColor
    
            self.addTarget(self, action: self.actionName, for: .valueChanged)
    
            self.translatesAutoresizingMaskIntoConstraints = false
        }
    
        required init?(coder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
    }
    

    ViewController中的用法

    import UIKit
    
    class ViewController: UIViewController {
    
        let segmentOne: MySegmentControl = {
            let segment1 = MySegmentControl(actionName:  #selector(segmentAction))
            return segment1
        }()
    
        override func viewDidLoad() {
            super.viewDidLoad()
            view.addSubview(segmentOne)
        }
    
        @objc func segmentAction(sender: UISegmentedControl) {
            print("segmentAction")
        }
    }
    

    let segment1 = MySegmentControl(actionName: #selector(segmentAction(sender:))) let segment1 = MySegmentControl(actionName: "segmentAction")

    0 回复  |  直到 6 年前
        1
  •  1
  •   mistdon    6 年前

    你应该删除 self.addTarget(self, action: self.actionName, for: .valueChanged) class MySegmentControl ,在函数下面添加 viewDidLoad() :

    segmentOne.addTarget(self, action: #selector(segmentAction(sender:)), for: .valueChanged)