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

在uipickerview的单元格中使用uibutton

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

    在我的应用程序中,我有一个设置页,我希望有一个UIPickerView作为复选框(列出项目,您可以启用或禁用它们)我已经找到了不同的解决方案,我能找到的只是使用viewForRow和UIButton我可以添加按钮,它看起来不错,但按钮似乎不可点击。

    以下是我的实现:

    func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView{
        let button = UIButton(type: .system)
        button.addTarget(self, action: #selector(screenSelectorButtonPress(_:)), for: .touchUpInside)
        button.tag = 0
        if row == 0{
            button.setTitle(Array3[row], for: .normal)
        }else{
            button.setTitle("\u{2610} \(Array3[row])", for: .normal)
        }
        return button
    }
    
    @objc func screenSelectorButtonPress(_ sender:UIButton!){
        print("test")
    }
    

    所有的细胞都正常生长,但是轻敲它们什么也做不了。 我想要的功能正是所看到的 here 在狩猎中。

    有没有其他的方法来做这件事,或者我是做了什么错误的按钮?当然,我可以使用开关,但是我们的Android版本的应用程序使用了一个类似Safari的检查列表,我们希望保持一致。

    1 回复  |  直到 6 年前
        1
  •  -1
  •   Shehata Gamal    6 年前

    你应该实施

    func pickerView(_ pickerView: UIPickerView, 
            didSelectRow row: Int, 
             inComponent component: Int)
    

    //

    self.pickerView.delegate = self
    

    //

    class ViewController: UIViewController , UIPickerViewDelegate,UIPickerViewDataSource , UIGestureRecognizerDelegate {
    
        let pickerView = UIPickerView()
    
        override func viewDidLoad() {
    
            super.viewDidLoad()
    
            pickerView.frame = CGRect(x: 0, y: 30, width: self.view.frame.width, height: 300)
    
            pickerView.delegate = self
    
            pickerView.dataSource = self
    
            view.addSubview(pickerView)
    
            let tap = UITapGestureRecognizer(target: self, action: #selector(pickerTapped))
    
            tap.delegate = self
    
            pickerView.addGestureRecognizer(tap)
    
        }
        func numberOfComponents(in pickerView: UIPickerView) -> Int {
            return 1
        }
    
        func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
            return Array3.count
        }
    
        func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
            print(row)
        }
    
    
        func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    
            if row == 0 {
    
                return Array3[row]
            }
            else {
    
                return "\u{2610} \(Array3[row])"
            }
    
        }
    
    
        @objc func pickerTapped(tapRecognizer: UITapGestureRecognizer) {
            if tapRecognizer.state == .ended {
                let rowHeight = self.pickerView.rowSize(forComponent: 0).height
                let selectedRowFrame = self.pickerView.bounds.insetBy(dx: 0, dy: (self.pickerView.frame.height - rowHeight) / 2)
                let userTappedOnSelectedRow = selectedRowFrame.contains(tapRecognizer.location(in: self.pickerView))
                if userTappedOnSelectedRow {
                    let selectedRow = self.pickerView.selectedRow(inComponent: 0)
                    pickerView(self.pickerView, didSelectRow: selectedRow, inComponent: 0)
                }
            }
        }
    
    
        func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
            return true
        }
    
    
    }