如何限制UIPickerView组件

时间:2016-06-28 05:41:48

标签: ios objective-c uipickerview uipickerviewcontroller

如何限制UIPickerView组件滚动。

我在UIPickeView中有两个组件。一秒组件结束滚动允许用户触摸第一个组件以更改其中的值。

如何限制用户触摸组件1,除非第二个组件滚动补充。

1 个答案:

答案 0 :(得分:0)

使用this extension,可以检查UIPickerView是否滚动。取决于滚动,您可以启用/禁用与UIPickerView的交互。

extension UIView {

    func isScrolling () -> Bool {

        if let scrollView = self as? UIScrollView {
            if (scrollView.isDragging || scrollView.isDecelerating) {
                return true
            }
        }

        for subview in self.subviews {
            if subview.isScrolling() {
                return true
            }
        }
        return false
    }
}

UIPickerViewDelegate是否检测滚动。

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {

    if pickerView.isScrolling() {
        pickerView.isUserInteractionEnabled = false
    } else {
        pickerView.isUserInteractionEnabled = true
    }

    //Use this for reduce lines
    //pickerView.isUserInteractionEnabled = !pickerView.isScrolling()

    return "Row \(row)"
}

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    pickerView.isUserInteractionEnabled = true
}
  

唯一的问题是您无法触摸当前滚动组件,直到组件完成滚动为止。希望,有人也可以解决这个问题。