如何限制 UIPickerView 组件

Posted

技术标签:

【中文标题】如何限制 UIPickerView 组件【英文标题】:How to restrict UIPickerView Component 【发布时间】:2016-06-28 05:41:48 【问题描述】:

如何限制UIPickerView组件滚动。

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

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

【问题讨论】:

【参考方案1】:

使用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

唯一的问题是你不能触摸当前的滚动组件,直到组件完成滚动。希望,也有人解决这个问题。

【讨论】:

以上是关于如何限制 UIPickerView 组件的主要内容,如果未能解决你的问题,请参考以下文章

如何正确禁用 UIPickerView 组件滚动?

你如何让 UIPickerView 组件环绕?

如何获取 UIPickerView 中组件的位置?

如何在具有多个组件的 UIPickerView 中为特定组件添加图像?

如何使用双组件 UIPickerview 调用转换

如何在 UIPickerView 中选择不同组件的完整行?