Как ограничить компонент UIPickerView

Как ограничить UIPickerView прокрутка компонентов.

У меня есть два компонента в UIPickeView прокрутка заканчивается одним вторым компонентом позволяет пользователю коснуться первого компонента, чтобы изменить значение в нем.

Как я могу запретить пользователю прикасаться к компоненту один до тех пор, пока не будет дополнена прокрутка второго компонента.

1 ответ

Используя это расширение, вы можете проверить, прокручивает ли 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
}

Единственная проблема в том, что вы не можете коснуться текущего компонента прокрутки, пока компонент не завершил прокрутку. НАДЕЖДА, кто-то решит это тоже.

Другие вопросы по тегам