2013-03-22 18 views
14

Czy ktoś może opisać, w jaki sposób mogę utworzyć UIPickerView w trybie monotouch za pomocą XCode i wypełnić go przykładowymi danymi?Prosty UIPickerView w MonoTouch (Xamarin)?

Spojrzałem na przykład tutaj: https://github.com/xamarin/monotouch-samples/blob/master/MonoCatalog-MonoDevelop/PickerViewController.xib.cs, ale to nie było bardzo pomocne, ponieważ tworzę mój UIPickerView w XCode. Oto, co mam do tej pory:

public partial class StatusPickerPopoverView : UIViewController 
{ 
    public StatusPickerPopoverView (IntPtr handle) : base (handle) 
    { 
     pickerStatus = new UIPickerView(); 
     pickerStatus.Model = new StatusPickerViewModel(); 
    } 

    public StatusPickerPopoverView(): base() 
    { 
    } 

    public class StatusPickerViewModel : UIPickerViewModel 
    { 
     public override int GetComponentCount (UIPickerView picker) 
     { 
      return 1; 
     } 

     public override int GetRowsInComponent (UIPickerView picker, int component) 
     { 
      return 5; 
     } 

     public override string GetTitle (UIPickerView picker, int row, int component) 
     { 

      return "Component " + row.ToString(); 
     } 
    } 
} 

Odpowiedz

20

Więc w zasadzie znaleźć odpowiedź i było waaaaaaaaaaaaaaay łatwiejsze niż można myśleć!

Model musi być ustawiony w ViewDidLoad inaczej spowoduje awarię ... Dlatego nie został poprawnie wypełniony. Zapamiętaj: ustaw go w "ViewDidLoad".

public partial class StatusPickerPopoverView : UIViewController 
{ 
    public StatusPickerPopoverView (IntPtr handle) : base (handle) 
    { 
    } 

    public override ViewDidLoad() 
    { 
     base.ViewDidLoad(); 

     pickerStatus = new UIPickerView(); 
     pickerStatus.Model = new StatusPickerViewModel(); 
    } 

    public class StatusPickerViewModel : UIPickerViewModel 
    { 
     public override int GetComponentCount (UIPickerView picker) 
     { 
      return 1; 
     } 

     public override int GetRowsInComponent (UIPickerView picker, int component) 
     { 
      return 5; 
     } 

     public override string GetTitle (UIPickerView picker, int row, int component) 
     { 

      return "Component " + row.ToString(); 
     } 
    } 
} 
+0

Czy możesz podać przykład kodu pocztowego? Mam ten sam problem. –

+0

Cześć Douglas, Edytowałem swoją odpowiedź, oto działający kod. –

+0

czy ktoś ma pomysł, jak wykryć, czy użytkownik stuknął poza selektorem? – nhenrique

2

Uważam, że chcesz ustawić właściwość Model UIPickerView z instancją UIPickerViewModel.

pickerStatus.Model = new StatusPickerViewModel(); 

Oto Gist, który zapewnia UIPickerViewModel dla IList: https://gist.github.com/jfoshee/5223962

2

Xamarin Studio 5.10:

public partial class ViewController : UIViewController 
    { 
     UIPickerView samplePicker; 

     public ViewController (IntPtr handle) : base (handle) 
     { 
     }  
     public override void ViewDidLoad() 
     { 
      base.ViewDidLoad(); 

      samplePicker = new UIPickerView (new CoreGraphics.CGRect (10f, 244f, this.View.Frame.Width - 20, 250f)); 
      samplePicker.BackgroundColor = UIColor.LightGray;  
      samplePicker.Model = new StatusPickerViewModel(); 

     }  
     public class StatusPickerViewModel : UIPickerViewModel 
     { 
      public override nint GetRowsInComponent (UIPickerView pickerView, nint component) 
      { 
       return 5; 
      } 

      public override string GetTitle (UIPickerView pickerView, nint row, nint component) 
      {    
       return "Title"; 
      } 

      public override nint GetComponentCount (UIPickerView pickerView) 
      { 

       return 1; 
      }   
     }  
     public override void ViewDidAppear (bool animated) 
     { 
      base.ViewDidAppear (animated); 

      this.View.AddSubview (samplePicker); 
     }  
     } 
1

stworzyłem blog post, pokrywając je w sposób bardziej szczegółowy niż obecnych odpowiedzi.

Najpierw dodaj UIPickerView do swojej storyboardu. Dodaj nazwę do UIPicker.

Następnie wymagana jest klasa implementująca interfejs UIPickerViewModel, który ustawia model Pickera, który go zapełnia. Jeśli znasz lepiej programowanie aplikacji na Androida, konfigurowanie selektora dla systemu Xamarin iOS może wydawać się dziwne, nie możesz po prostu wypełnić listy wyboru.

Na koniec ustaw model UIPickerView dla utworzonej klasy.