Первый раз задаю вопрос, так что оставайтесь со мной, если я что-то забуду.
Итак, у меня есть 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
}