2013-03-22 13 views
14

Qualcuno può descrivere come posso creare un UIPickerView in monotouch usando XCode e popolarlo con dati di esempio?Un semplice UIPickerView in MonoTouch (Xamarin)?

Ho visto l'esempio qui: https://github.com/xamarin/monotouch-samples/blob/master/MonoCatalog-MonoDevelop/PickerViewController.xib.cs ma questo non è stato molto utile poiché sto creando il mio UIPickerView in XCode. Ecco quello che ho finora:

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

risposta

20

Così ho praticamente trovato la risposta ed è stato waaaaaaaaaaaaaaay facile di quanto si possa pensare!

Il modello deve essere impostato in ViewDidLoad altrimenti si bloccherà ... Ecco perché non veniva popolato correttamente. Ricorda: configuralo in "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

Si prega di inserire un esempio di codice? Sto avendo lo stesso problema. –

+0

Ciao Douglas, ho modificato la mia risposta, ecco il codice funzionante. –

+0

qualcuno ha un'idea su come rilevare se l'utente ha toccato all'esterno del selettore? – nhenrique

2

Credo che si desidera impostare proprietà modello del UIPickerView con l'istanza UIPickerViewModel.

pickerStatus.Model = new StatusPickerViewModel(); 

Ecco un Gist che fornisce un UIPickerViewModel per un 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

ho creato un blog post, che copre in modo più dettagliato rispetto alle risposte attuali.

In primo luogo, aggiungi UIPickerView allo storyboard. Aggiungi un nome a UIPicker.

Successivamente, è richiesta una classe che implementa UIPickerViewModel, che imposta il modello Pickers che lo popola. Se hai più familiarità con lo sviluppo di Android, impostare un Picker per Xamarin per iOS può sembrare strano, non puoi semplicemente popolare il selettore con un elenco.

Infine, impostare il modello di UIPickerView sulla classe creata.