Swift - UiPickerView автоматически прокручивается при перезагрузке - PullRequest
0 голосов
/ 17 января 2019

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

Итак, у меня есть UiPicker, в котором есть tapRecognizer. Поскольку пользователь нажимает, я обновляю цвет постучавших строк и в идеале хотел бы перезагрузить при нажатии, чтобы обновить цвет немедленно. Однако по какой-то причине это автоматически прокручивается в верхнюю часть средства выбора.

Выбор строки сразу после перезагрузки компонентов почти сработал, но все еще прокручивается вверх примерно в 50% случаев.

У меня была хорошая игра с этим, но я не могу найти способ перезарядки ReloadAllComponents или ReloadComponent без автоматической прокрутки к вершине. У кого-нибудь есть идеи о том, где все это испортилось?

Спасибо

 @objc func pickerTapped(tapRecognizer: UITapGestureRecognizer) {
    if tapRecognizer.state == .ended {
        let rowHeight = self.RightPicker.rowSize(forComponent: 0).height
        let selectedRowFrame = self.RightPicker.bounds.insetBy(dx: 0, dy: (self.RightPicker.frame.height - rowHeight) / 2)
        let userTappedOnSelectedRow = selectedRowFrame.contains(tapRecognizer.location(in: self.RightPicker))

        if userTappedOnSelectedRow {
             PickerNumber = self.RightPicker.selectedRow(inComponent: 0)
                if(pickerSelectedData.contains(pickerData[PickerNumber]) != true){
                    pickerSelectedData.append(pickerData[PickerNumber])
                    pickerSelectedD[PickerNumber] = 1
                }
                else{
                    if let itemToRemoveIndex1 = pickerSelectedData.index(of: pickerData[PickerNumber]) {
                        pickerSelectedData.remove(at: itemToRemoveIndex1)
                    }
                    pickerSelectedD[PickerNumber] = 0
                }
                RightPicker.reloadAllComponents()
                RightPicker.selectRow(PickerNumber, inComponent: 0, animated: false)
            }
        }
    }

Дополнительные коды

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        RightPicker.reloadAllComponents();
    }

Еще один

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    return true
}

1 Ответ

0 голосов
/ 17 января 2019

Проблемная часть, кажется, reloadAllComponents.

Вы можете попробовать использовать reloadComponent: . Это загрузит только определенный элемент.

...