2016-07-21 11 views
1

Ich habe eine benutzerdefinierte UIPickerView, die ich in der ViewDidLoad-Methode des ViewControllers das Modell von festlegen.Warum kann ich das Aussehen eines ausgewählten Elements in UIPickerView nicht einstellen?

Ich bin die Lage, das Aussehen jeder Zeile Element zu setzen, die in einer Überschreibung von GetView() für meinen PickerModel, wie so erscheint:

public override UIView GetView(UIPickerView pickerView, nint row, nint component, UIView view) 
    { 
     var selectedItem = pickerView.SelectedRowInComponent(0); 

     UILabel lbl = new UILabel(new CGRect(0, 0, 130f, 40f)); 
     lbl.TextColor = UIColor.Black; 
     lbl.Font = UIFont.SystemFontOfSize(12f); 
     lbl.TextAlignment = UITextAlignment.Center; 
     lbl.Text = _values[(int)row]; 

     if (row == selectedItem) 
     { 
      lbl.BackgroundColor = MyColours.GetBluish; 
     } 

     return lbl; 
    } 

Aber die if-Anweisung für die Darstellung der zur Zeit einstellen Der ausgewählte Artikel wird nur für die erste und letzte Position im Picker ausgelöst. Warum ist das?

Ein paar Dinge zu beachten Mein Stellvertreter und meine Datenquelle werden auf mein Modell gesetzt, nachdem ich die Modellvariable in meinem ViewController eingestellt habe. Soll der Delegat und die Datenquelle funktionieren? Andere Anleitungen schlagen vor, ViewForRow (ViewFor in Xamarin) in der UIPickerView-Unterklasse zu überschreiben. Aber diese Überschreibung wird nicht aufgerufen wird, wenn ich mit dem Picker interagieren :(

Antwort

0

Es funktioniert nicht, weil UIPickerView GetView aufruft, bevor die Zeile ausgewählt ist

Aufschalten Selected statt und aktualisieren Sie die aktuelle Ansicht..

public override void Selected(UIPickerView pickerView, nint row, nint component) 
{ 
    var view = pickerView.ViewFor(row, component); 
    view.BackgroundColor = Drive1Colours.GetBluish; 
} 
+0

Das Problem bei diesem Ansatz ist es nicht die UIPickerView aktualisieren, da ich durch sie navigieren sie nur Updates, wenn ich die Picker loslassen – Chucky

+0

auch diese Aufruf zu var view = picker.ViewFor (Zeile, Komponente);. Erträge Null. – Chucky