Простой UIPickerView в MonoTouch (Xamarin)? - программирование

Простой UIPickerView в MonoTouch (Xamarin)?

Может ли кто-нибудь описать, как я могу создать UIPickerView в monotouch с помощью XCode и заполнить его данными образца?

Я рассмотрел здесь пример: https://github.com/xamarin/monotouch-samples/blob/master/MonoCatalog-MonoDevelop/PickerViewController.xib.cs, но это не очень помогло, так как я создаю свой UIPickerView в XCode, Вот что я до сих пор:

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

Ответ 1

Итак, я в основном нашел ответ, и это было waaaaaaaaaaaaaaay проще, чем вы можете подумать!

Модель должна быть установлена ​​в ViewDidLoad, иначе она будет разбита... Вот почему она не была заполнена правильно. Помните: настройте его в "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();
        }
    }
}

Ответ 2

Я считаю, что вы хотите установить свойство UIPickerView Model с вашим экземпляром UIPickerViewModel.

pickerStatus.Model = new StatusPickerViewModel();

Вот Gist, который предоставляет UIPickerViewModel для IList: https://gist.github.com/jfoshee/5223962

Ответ 3

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

Ответ 4

Я создал сообщение в блоге, охватывая его более подробно, чем текущие ответы.

Во-первых, добавьте UIPickerView в свою раскадровку. Добавьте имя в UIPicker.

Далее, требуется класс, реализующий UIPickerViewModel, который устанавливает модель Pickers, которая заполняет ее. Если вы более знакомы с разработкой Android, настройка Picker для Xamarin iOS может показаться странной, вы не можете просто заполнить сборщик списком.

Наконец, установите модель UIPickerView в созданный класс.