Ich möchte den Zeilenwert in Echtzeit erhalten, während der iPhone-Benutzer ein Rad in einem UIPickerView dreht (nicht nur, wenn sich das Rad in einer bestimmten Reihe niederlässt). Ich schaute in UIPickerView Unterklassen und überschrieb dann die MouseDown-Methode, aber ich konnte nicht das zum Funktionieren bringen. Irgendwelche Vorschläge würden sehr geschätzt werden.UIPickerView: Erhalte Zeilenwert während des Drehens?
Antwort
Die UIPickerView
Dimensionen sind ziemlich konsistent. Anstatt eine Unterklasse zu erstellen, könnten Sie vielleicht eine eigene UIView
über der Picker-Ansicht überlagern, von der Sie Ziehen-Bewegungen verfolgen und messen können, bevor Sie diese Berührungen an die Picker-Ansicht übergeben.
Vielleicht versuchen die delegierte Methode der Umsetzung:
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
Man könnte es als Pass-Through behandeln (nur auf der Durch die reusingView Parameter zurück), aber jedes Mal, es hieß Sie würde diese Ansicht wissen, kam auf dem Bildschirm als Der Benutzer scrollte - dann konnten Sie berechnen, wie viele Ansichten von dieser Ansicht in der Mitte versetzt waren.
Das hat funktioniert! Danke Kendall. Sehr schlau. – user183266
Noch einfacher: Rufen Sie in dieser Methode die Komponente - (NSInteger) selectedRowInComponent: (NSInteger) auf. Sie erhalten die aktuelle Zeile und können ihren Wert abrufen, ohne Offsets zu berechnen oder sich Gedanken darüber zu machen, wie der Picker sich dreht. –
Sie können UIScrollView in UIPickerView Hierarchie nach der folgenden Methode finden:
func findScrollView(view:UIView) -> UIScrollView? {
if view is UIScrollView {
return view as? UIScrollView
}
for subview in view.subviews {
if subview is UIView {
let result = findScrollView(subview as UIView)
if result != nil {
return result
}
}
}
return nil
}
Implementierung und Setup UIScrollViewDelegate:
let scrollView = findScrollView(pickerView)
if scrollView != nil {
scrollView!.delegate = self
}
Und aktuell ausgewähltes Element erkennen:
func scrollViewDidScroll(scrollView: UIScrollView) {
let offset = scrollView.contentOffset.y
let index = Int(offset/itemHeight)
if index >= 0 && index < items.count {
let item = items[index]
// do something with item
}
}
das funktioniert nicht –
- 1. Deaktivieren bestimmter Zeilenwert in UIPickerView
- 2. Angular {{Code}} ist während des Drehens des mobilen Geräts sichtbar
- 3. Ausgewähltes Objekt nur während des Verschiebens, Skalierens und Drehens wiedergeben
- 4. Die Physik des Drehens in einem Boot
- 5. Erhalte den aktuell ausgewählten Wert von UIPickerView
- 6. UIPickerView zum Anzeigen des Controllers
- 7. aktuellen Zeilenwert mit nächsten Zeilenwert vergleichen
- 8. Wie erhalte ich den Wert eines Feldes während des Einfügens?
- 9. Firebase: Während des Tests erhalte ich „undefiniert ist keine Funktion“
- 10. UIPickerView-Absturz beim Wechseln des segmentierten Steuerelements
- 11. UIPickerview customization
- 12. Zellen Überlauf Zeilenwert
- 13. Zeilenwert in Codezeichen erhöhen
- 14. UIPickerView und UITextField erhalten Wert von UIPickerView
- 15. anpassen UIPickerView
- 16. Disable UIPickerView
- 17. UIPickerView reload
- 18. UIPickerView Daten
- 19. UIPickerView-Zeilenfarbe
- 20. Reload UIPickerView
- 21. Erhalte die ursprüngliche URL während der Anmeldung
- 22. Während Anruf abzuweisen ich erhalte einen Fehler
- 23. UIPickerView Inhalt fließt unerwartet
- 24. Erhalte das Hintergrundbild des UIButton
- 25. Gitter-Zeilenwert an htmleditor binden
- 26. Join Mehrere Tabellen mit Zeilenwert
- 27. R: Den entsprechenden Zeilenwert finden
- 28. DAX zurückkehrt Spaltennamen als Zeilenwert
- 29. Subsetting datafram basierend auf Zeilenwert
- 30. Die Größe des Auswahlindikators in einem UIPickerView ändern
Abgesehen davon, dass dann Sie müssten die Anzahl der Drehungen, die für einen bestimmten Widerstand stattgefunden haben, rückentwickeln Nachdem Sie losgelassen hatten ... –
Ich bin mir nicht sicher, ob das Problem mit dem Unterklassenansatz anders wäre. Zumindest mit dem UIView-Ansatz könnte sein Code für andere Zwecke einfacher wiederverwendet werden. –
Richtig, jeder Ansatz, der nur die Eingabe in die Auswahlansicht betrachtet, hätte das gleiche Problem. –