Ich habe eine benutzerdefinierte UIPickerView
, wo ich verwende:
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.
Sie müssen sicherstellen, dass Ihre benutzerdefinierte Ansicht folgende Eigenschaften aufweist:
pickerView:rowHeightForComponent:
und pickerView:widthForComponent:
. Die Standardhöhe ist 44, wenn Sie keine benutzerdefinierte Höhe angeben. [UIColor clearColor]
sein. 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% 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.
Ich denke, Sie möchten vielleicht die "showSelectionIndicator" -Eigenschaft von UIPickerView
betrachtenIch 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.
Tags und Links iphone cocoa-touch uipickerview