Überschriebene markierte Auswahl in UIPickerView

8

Ich habe eine benutzerdefinierte UIPickerView , wo ich verwende:

%Vor%

um die Auswahl mit UILabels zu füllen. Gibt es eine Möglichkeit, das Verhalten zum Hervorheben der ausgewählten Zeile bei Berührung zu deaktivieren?

Ich denke, das ist eine Eigenschaft des zugrunde liegenden UITableViewCell inhärent in UIPickerView und ich finde keine Möglichkeit, es zu ändern.

    
Jon 05.06.2009, 22:30
quelle

4 Antworten

16

Sie müssen sicherstellen, dass Ihre benutzerdefinierte Ansicht folgende Eigenschaften aufweist:

  1. Es muss auf die gleichen Dimensionen skaliert werden, die UIPickerView basierend auf Ihren Delegatmethoden erwartet - pickerView:rowHeightForComponent: und pickerView:widthForComponent: . Die Standardhöhe ist 44, wenn Sie keine benutzerdefinierte Höhe angeben.
  2. Die Hintergrundfarbe muss [UIColor clearColor] sein.
  3. Die Ansicht muss alle Berührungen erfassen.

Der eine Fehler, wenn UILabel instances als benutzerdefinierte Ansicht verwendet wird, ist UILabel defaults userInteractionEnabled bis NO ( UIView , auf der anderen Seite, setzt diese Eigenschaft auf YES ).

Basierend auf diesen Anforderungen kann der Beispielcode aus Halle erstellt werden wie folgt umgeschrieben werden. In diesem Beispiel werden zuvor erstellte Ansichten, die für eine schnelle Bildlaufleistung benötigt werden, ebenfalls korrekt wiederverwendet.

%Vor%     
Doug Barth 16.09.2009, 16:00
quelle
12

Durch Festlegen der Eigenschaft userInteractionEnabled von UILabel auf YES wird das Hervorhebungsproblem behoben, aber es wird auch deaktiviert, dass UIPickerView von Autoscrolling ausgewählt wird, um die Zeile auszuwählen, die berührt wurde.

Wenn Sie das Hervorhebungsverhalten deaktivieren möchten, aber die automatische Bildlauffunktion von UIPickerView beibehalten möchten, rufen Sie die Funktion setShowSelection in den UITableCell -Instanzen auf, die in UIPickerView enthalten sind. Eine Möglichkeit, dies zu tun, besteht darin, die Klasse UILabel ähnlich wie folgt zu untergliedern:

PickerViewLabel.h -

%Vor%

PickerViewLabel.m -

%Vor%

Wenn Sie zuvor eine Instanz von UILabel in pickerView:viewForRow:forComponent:reusingView: zurückgegeben haben, geben Sie eine Instanz von PickerViewLabel zurück. Als Beispiel, mit dem Code von Doug , würden Sie alle ersetzen die Fälle von ' UILabel ' mit ' PickerViewLabel '. Denken Sie daran, die pickerRowLabel.userInteractionEnabled = YES; -Zeile zu entfernen.

    
Christine 23.11.2009 20:42
quelle
0

Ich denke, Sie möchten vielleicht die "showSelectionIndicator" -Eigenschaft von UIPickerView

betrachten     
06.06.2009 19:26
quelle
0

Ich bin nicht sicher, ob es eine einfache Möglichkeit gibt, das Auswahlfeedback zu entfernen, aber Sie können es verdecken, wenn Sie den Hintergrund des Labels weiß machen und ihn auf die gleichen Abmessungen wie das blaue Auswahlrechteck skalieren:

%Vor%

Bei einer Breite von 316 deckt das Etikett alle blauen Streifen auf jeder Seite ab, und bei 320 deckt es die Auswahlrückmeldung vollständig ab, aber es deckt auch ein wenig von den äußeren Radverläufen ab, die stören können oder auch nicht du.

    
Halle 10.06.2009 17:29
quelle