2016-07-21 3 views
1

私は自分のViewControllerのViewDidLoadメソッドでモデルを設定するカスタムUIPickerViewを持っています。UIPickerViewで選択した項目の外観を設定できないのはなぜですか?

私はそうのように、私のPickerModel用)getViewメソッド(のオーバーライドに表示される各列の項目の外観を設定することができるよ:

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; 
    } 

しかし、現在の外観を設定する場合は、そのステートメント選択されたアイテムは、ピッカー内の最初と最後のアイテムに対してのみ起動します。どうしてこれなの?

注意するカップルの事 マイデリゲートとデータソースは、私のViewControllerのモデル変数を設定した後、私のモデルに設定されています。デリゲートとデータソースがどのように動作するはずですか? 他のガイドでは、UIPickerViewサブクラスのViewForRow(XamarinのViewFor)をオーバーライドすることを推奨しています。 。。しかし、このオーバーライドは、私はピッカー:(と対話するとき

オーバーライドSelected代わり

答えて

0

行が選択される前に、UIPickerViewはGetViewを呼び出すので、それが働いていないと呼ばれ、現在のビューを更新取得されていません。

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

このアプローチの問題は、私はまた、ピッカー – Chucky

+0

その呼び出しに VARビュー= picker.ViewFor(行、成分)を放出するとき、それは私はそれをスクロールするようUIPickerViewを更新それだけ更新されませんである。戻りますヌル。 – Chucky

関連する問題