web-dev-qa-db-fra.com

Un simple UIPickerView dans MonoTouch (Xamarin)?

Quelqu'un peut-il décrire comment je peux créer un UIPickerView en monotouch en utilisant XCode et le renseigner avec des exemples de données?

J'ai regardé l'exemple ici: https://github.com/xamarin/monotouch-samples/blob/master/MonoCatalog-MonoDevelop/PickerViewController.xib.cs mais cela n'a pas été très utile depuis que je suis créer mon UIPickerView dans le XCode. Voici ce que j'ai jusqu'à présent:

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();
        }
    }
}
15
P. Sami

Donc, en gros, j'ai trouvé la réponse et c'était waaaaaaaaaaaaaaay plus facile que vous ne le pensez!

Le modèle doit être défini dans ViewDidLoad, sinon cela plantera ... C'est pourquoi il n'a pas été rempli correctement. Rappelez-vous: configurez-le dans "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();
        }
    }
}
21
P. Sami

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);
        }    
        }
3
A.G

Je pense que vous souhaitez définir la propriété Model de UIPickerView avec votre instance UIPickerViewModel.

pickerStatus.Model = new StatusPickerViewModel();

Voici un résumé contenant un UIPickerViewModel pour un IList: https://Gist.github.com/jfoshee/5223962

2
Jacob Foshee

J'ai créé un article blog , le couvrant plus en détail que les réponses actuelles. 

Premièrement, ajoutez un UIPickerView à votre Storyboard. Ajoutez un nom à UIPicker.

Ensuite, une classe implémentant UIPickerViewModel est requise pour définir le modèle Pickers qui le remplit. Si vous êtes plus familiarisé avec le développement Android, la configuration d'un sélecteur pour Xamarin iOS peut sembler étrange, vous ne pouvez pas simplement remplir le sélecteur avec une liste.

Enfin, définissez le modèle de UIPickerView sur la classe créée. 

2
cfl