【问题标题】:Why am I unable to press the UIButton inside of my UIPickerView?为什么我无法按下 UIPickerView 内的 UIButton?
【发布时间】:2020-05-07 20:49:37
【问题描述】:

我有一个UIPickerView,其中添加了一个UIToolBar 项目(完成 按钮)。但是当我选择按钮时,它应该通过#selector(dismissKeyboard) 向控制台打印一些东西,但它没有。

我对 Swift 比较陌生,而且我正在以编程方式做所有事情,所以我很难弄清楚为什么我无法与作为子视图添加到我的 pickerView 的按钮进行交互。

这是我正在使用的相关代码...如果您需要更多信息,请告诉我...

另一方面,我已经为pickerView 分配了委托和数据源,并在viewDidLoad 中调用了createToolBar() 函数。

    var timerImage = UIButton()
    var timer = Timer()
    var timerDisplayed = 0
    let image1 = UIImage(named: "stopwatch")
    let timePicker = UIPickerView()

    @objc func dismissKeyboard(){
        print("PickerView Dismissed")
        view.endEditing(true)
    }

    func pickerViewConstraints(){
        timePicker.anchor(top: nil, leading: view.safeAreaLayoutGuide.leadingAnchor, bottom: view.safeAreaLayoutGuide.bottomAnchor, trailing: view.safeAreaLayoutGuide.trailingAnchor)
    }

    func createToolBar(){
        let doneButton = UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(dismissKeyboard))
        let toolBar = UIToolbar(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height))

        toolBar.sizeToFit()
        toolBar.setItems([doneButton], animated: true)
        toolBar.isTranslucent = false
        toolBar.isUserInteractionEnabled = true

        timePicker.addSubview(toolBar)
        self.view.bringSubviewToFront(toolBar)    
    }

    @objc func timeClock(){
        view.addSubview(timePicker)
        pickerViewConstraints()
        timePicker.backgroundColor = .white

        DispatchQueue.main.async {
            self.timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(self.Action), userInfo: nil, repeats: true)
            self.timerImage.setImage(nil, for: .normal)
        }
    }

【问题讨论】:

  • 我意识到的其他事情,当我尝试将工具栏的背景颜色更改为蓝色时,颜色不会改变。我猜这个问题与重叠视图有关......

标签: swift xcode button uipickerview toolbar


【解决方案1】:

如果我错了,请纠正我,但从技术上讲,您似乎没有在函数中调用 print。如果你想在控制台打印一些东西,代码应该是这样的:

   { error in 
     if let error = error {
       print("Error")
         }
     }

(这可以包含在您的DispatchQueue 中)如果这不是您向自己报告的错误,只是有一些类似的东西——

 } else {
   print("Button Tapped")
     }
  }

——应该也可以。我希望这有帮助!祝你好运!

【讨论】:

  • 感谢您的建议。我正在寻找的是按下“完成”barButtonItem 时的简单打印语句,因为我没有检查任何错误。那我是不是写错了这段代码? let doneButton = UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(dismissKeyboard)) @objc func dismissKeyboard(){ print("PickerView Dismissed") view.endEditing(true) }
  • 好的,我想我明白你在说什么了。老实说,我没有将打印控制台按钮直接添加到工具栏的经验。据我所知,您拥有的代码将不起作用。我相信您必须为“打印”创建一个 if / else 以应用于实际按钮。我创建了一些类似的按钮/功能。我在这里链接它:github.com/kcapretta/RadiusSocialNetworkingApp/blob/master/… 我还没弄明白,但也许你可以把这段代码砍掉,让一些东西工作?对不起,我无法提供更多帮助:(
猜你喜欢
  • 1970-01-01
  • 2020-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-21
  • 1970-01-01
  • 2016-06-30
相关资源
最近更新 更多