Swift:工具栏按钮没有反应

Swift:工具栏按钮没有反应,swift,uikit,Swift,Uikit,下面的屏幕有两个按钮的工具栏。他们有训练员。处理程序不是从按钮触发的。我尝试将处理程序分配给红色按钮,它就工作了。我需要帮助来找出错误 下面是我的代码: let toolbar: UIToolbar = { let tb = UIToolbar(frame: CGRect(x: 0, y: 0, width: 10, height: 10)) tb.isUserInteractionEnabled = true let doneButton = UIBarButtonI

下面的屏幕有两个按钮的工具栏。他们有训练员。处理程序不是从按钮触发的。我尝试将处理程序分配给红色按钮,它就工作了。我需要帮助来找出错误

下面是我的代码:

let toolbar: UIToolbar = {
    let tb = UIToolbar(frame: CGRect(x: 0, y: 0, width: 10, height: 10))
    tb.isUserInteractionEnabled = true
    let doneButton = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(choosen))
    let cancelButton = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: #selector(cancelSelection))
    tb.items = [doneButton, cancelButton]
    tb.translatesAutoresizingMaskIntoConstraints = false
    return tb
}()

override func viewDidLoad() {
    super.viewDidLoad()

    let but = UIButton(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
    but.addTarget(self, action: #selector(cancelSelection), for: .touchUpInside)
    but.backgroundColor = .red
    self.view.addSubview(but)
    self.view.obscure()

    weightPicker.addSubview(toolbar)

    toolbar.leadingAnchor.constraint(equalTo: weightPicker.leadingAnchor).isActive = true
    toolbar.trailingAnchor.constraint(equalTo: weightPicker.trailingAnchor).isActive = true
    toolbar.heightAnchor.constraint(equalToConstant: 50).isActive = true
    toolbar.topAnchor.constraint(equalTo: weightPicker.topAnchor).isActive = true

    self.view.addSubview(weightPicker)
    weightPicker.delegate = self
    weightPicker.leadingAnchor.constraint(equalTo: self.view.leadingAnchor).isActive = true
    weightPicker.trailingAnchor.constraint(equalTo: self.view.trailingAnchor).isActive = true
    weightPicker.heightAnchor.constraint(equalTo: self.view.heightAnchor, multiplier: 0.5).isActive = true
    weightPicker.bottomAnchor.constraint(equalTo: self.view.bottomAnchor).isActive = true
}

    @objc func choosen() {

    print(123)
    self.dismiss(animated: true, completion: nil)

}

@objc func cancelSelection() {

    print(123)
    self.dismiss(animated: true, completion: nil)

}

您好,在您的操作中,尝试在函数名之前添加控制器类的名称
#selector('here.cancelSelection)
,或者执行此操作
#selector(self.cancelSelection)

尝试使用lazy我认为问题在于您使用self

lazy var toolbar: UIToolbar = {
let tb = UIToolbar(frame: CGRect(x: 0, y: 0, width: 10, height: 10))
tb.isUserInteractionEnabled = true
let doneButton = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(self.choosen))
let cancelButton = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: #selector(self.cancelSelection))
tb.items = [doneButton, cancelButton]
tb.translatesAutoresizingMaskIntoConstraints = false
return tb}()

在UIPickerView中添加UIToolbar时,似乎出现了一些问题。您可以添加一些容器视图:

override func viewDidLoad() {
    super.viewDidLoad()

    let containerView = UIView()
    containerView.translatesAutoresizingMaskIntoConstraints = false
    weightPicker.translatesAutoresizingMaskIntoConstraints = false

    view.addSubview(containerView)
    containerView.addSubview(toolbar)
    containerView.addSubview(weightPicker)

    NSLayoutConstraint.activate([
        containerView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
        containerView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
        containerView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
        containerView.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.5),
        toolbar.topAnchor.constraint(equalTo: containerView.topAnchor),
        toolbar.leadingAnchor.constraint(equalTo: containerView.leadingAnchor),
        toolbar.trailingAnchor.constraint(equalTo: containerView.trailingAnchor),
        toolbar.heightAnchor.constraint(equalToConstant: 50.0),
        weightPicker.topAnchor.constraint(equalTo: toolbar.bottomAnchor),
        weightPicker.leadingAnchor.constraint(equalTo: containerView.leadingAnchor),
        weightPicker.trailingAnchor.constraint(equalTo: containerView.trailingAnchor),
        weightPicker.bottomAnchor.constraint(equalTo: containerView.bottomAnchor)
    ])
}

您确定没有忘记添加
@objc func choosen()
@objc func cancelSelection()
?确定。编译器修复了这个问题。。当您创建按钮并将其添加到viewDidLoad中的工具栏时,我有一个问题。没有问题吧?我已经尝试过了。不,反应:(.我认为工具栏不允许访问按钮,但是,我不知道如何检查它似乎不可能只将工具栏添加到视图-编译器将触发错误您收到了什么错误?我已经在Xcode 9.0上测试了这一点,它正在工作。我找到了其他解决方案。我创建了视图并在其上放置了按钮。然后我将此视图放在p的顶部icker.我怀疑你的解决方案是否有效,因为我知道工具栏应该链接到texfield。你能发给我吗leonif1@gmail.com?我会检查。谢谢;)这是你的要点。只需将它添加到游乐场进行测试。你是最好的!!!我根据我的情况进行了更改,它可以工作。为什么我不能在self.view上添加工具栏并将其用作容器?