Простой 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();
}
}
}
Ответы
Ответ 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 в созданный класс.