Xamarin iOS UiPickerView教程
我试图找到一些关于在Xamarin iOS中使用UiPickerView的基本说明。这里有一些关于堆栈溢出的问题可以回答某些问题,但我只想简单地概述一下,并希望了解如何将UiPickerView添加到ViewController、连接数据和注册事件。作为Xamarin和iOS的不速之客,我正在努力为这种类型的控件的代码进行编目。在MonoCatalog MonoDevelop示例中,这听起来像是您所要求的Xamarin iOS UiPickerView教程,ios,xamarin,uipickerview,Ios,Xamarin,Uipickerview,我试图找到一些关于在Xamarin iOS中使用UiPickerView的基本说明。这里有一些关于堆栈溢出的问题可以回答某些问题,但我只想简单地概述一下,并希望了解如何将UiPickerView添加到ViewController、连接数据和注册事件。作为Xamarin和iOS的不速之客,我正在努力为这种类型的控件的代码进行编目。在MonoCatalog MonoDevelop示例中,这听起来像是您所要求的 特别是,定义了CreateCustomPicker函数和CustomPickerModel
特别是,定义了
CreateCustomPicker
函数和CustomPickerModel
类型。//将PickerViewModel设置为PickerView
var examplePVM = new ExamplePickerViewModel(myListOfItems);
YourPickerView.Model = examplePVM ;
//创建一个PickerViewModel
public class ExamplePickerViewModel : UIPickerViewModel
{
private List<string> _myItems;
protected int selectedIndex = 0;
public ExamplePickerViewModel(List<string> items)
{
_myItems = items;
}
public string SelectedItem
{
get { return _myItems[selectedIndex]; }
}
public override nint GetComponentCount (UIPickerView picker)
{
return 1;
}
public override nint GetRowsInComponent (UIPickerView picker, nint component)
{
return _myItems.Count;
}
public override string GetTitle (UIPickerView picker, nint row, nint component)
{
return _myItems[row];
}
public override void Selected (UIPickerView picker, nint row, nint component)
{
selectedIndex = (int)row;
}
}
public类示例pickerviewmodel:UIPickerViewModel
{
私人物品清单;
受保护的整数selectedIndex=0;
公共示例PickerViewModel(列表项)
{
_myItems=项目;
}
公共字符串SelectedItem
{
获取{return}myItems[selectedIndex];}
}
公共覆盖nint GetComponentCount(UIPickerView选择器)
{
返回1;
}
公共覆盖nint GetRowsInComponent(UIPickerView选择器,nint组件)
{
return\u myItems.Count;
}
公共重写字符串GetTitle(UIPickerView选择器、第九行、第九组件)
{
返回_myItems[行];
}
已选择公共覆盖无效(UIPickerView选择器、第九行、第九组件)
{
selectedIndex=(int)行;
}
}
我创建了一个用于介绍UIPickerView基础知识的。这可能是令人困惑的基本想法:
UIPickerViewModel
pickerExample.model=newyourlistpicker(YourList)代码>
public class PickerDataModel : UIPickerViewModel
{
public event EventHandler<EventArgs> ValueChanged;
/// <summary>
/// The items to show up in the picker
/// </summary>
public List<string> Items { get; private set; }
/// <summary>
/// The current selected item
/// </summary>
public string SelectedItem
{
get { return Items[SelectedIndex]; }
}
public int SelectedIndex
{
get
{
return selectedIndex;
}
set
{
selectedIndex = value;
}
}
private int selectedIndex;
public PickerDataModel()
{
Items = new List<string>();
}
/// <summary>
/// Called by the picker to determine how many rows are in a given spinner item
/// </summary>
public override nint GetRowsInComponent(UIPickerView picker, nint component)
{
return Items.Count;
}
/// <summary>
/// called by the picker to get the text for a particular row in a particular
/// spinner item
/// </summary>
public override string GetTitle(UIPickerView picker, nint row, nint component)
{
return Items[(int)row];
}
/// <summary>
/// called by the picker to get the number of spinner items
/// </summary>
public override nint GetComponentCount(UIPickerView picker)
{
return 1;
}
/// <summary>
/// called when a row is selected in the spinner
/// </summary>
public override void Selected(UIPickerView picker, nint row, nint component)
{
SelectedIndex = (int)row;
if (ValueChanged != null)
{
ValueChanged(this, new EventArgs());
}
}
} [enter image description here][1]
[1]: https://i.stack.imgur.com/Ld1uU.png
公共类PickerDataModel:UIPickerWebModel
{
公共事件处理程序值已更改;
///
///要显示在选择器中的项目
///
公共列表项{get;private set;}
///
///当前选定的项目
///
公共字符串SelectedItem
{
获取{返回项目[SelectedIndex];}
}
公共整数选择索引
{
得到
{
返回所选索引;
}
设置
{
selectedIndex=值;
}
}
私有int-selectedIndex;
公共PickerDataModel()
{
项目=新列表();
}
///
///由选择器调用以确定给定微调器项中有多少行
///
公共覆盖nint GetRowsInComponent(UIPickerView选择器,nint组件)
{
返回项目。计数;
}
///
///由选择器调用以获取特定行中特定行的文本
///微调器项目
///
公共重写字符串GetTitle(UIPickerView选择器、第九行、第九组件)
{
返回项目[(int)行];
}
///
///由选择器调用以获取微调器项的数量
///
公共覆盖nint GetComponentCount(UIPickerView选择器)
{
返回1;
}
///
///在微调器中选择行时调用
///
已选择公共覆盖无效(UIPickerView选择器、第九行、第九组件)
{
SelectedIndex=(int)行;
if(ValueChanged!=null)
{
ValueChanged(这是新的EventArgs());
}
}
}[在此处输入图像描述][1]
[1]: https://i.stack.imgur.com/Ld1uU.png
显示从选择器中选择的数据的文本字段
private void AddTextField()
{
SelectGenderTextField.Placeholder = "Select Gender";
SelectGenderTextField.Layer.BorderWidth = 1;
SelectGenderTextField.Layer.BorderColor = UIColor.Black.CGColor;
SelectGenderTextField.Layer.MasksToBounds = true;
SelectGenderTextField.Layer.SublayerTransform = CATransform3D.MakeTranslation(5, 0, 0); //to Create a Space At The beginning of the text field
SelectGenderTextField.InputView = GenderPicker; //To Start The UIPickerView from The bottom.
}
选择器初始化和设置数据
private void GenderPicker()
{
var genderList = new List<string> {
"Male","Female"
};
var picker = new GenderPickerModel(genderList);
GenderPicker.Model = picker;
picker.ValueChanged += (sender, e) => {
SelectGenderTextField.Text = picker.SelectedGenderByUser; //Update The Selected Value In the TextField
View.EndEditing(true);// To Dismiss the Picker View Once The User Select The Value
};
}
GenderPickerModel类
private void Constraint()
{
View.AddSubviews(SelectGenderTextField);
View.SubviewsDoNotTranslateAutoresizingMaskIntoConstraints();
View.AddConstraints(
SelectGenderTextField.WithRelativeWidth(View, 0.80f),
SelectGenderTextField.WithRelativeHeight(View, 0.05f),
SelectGenderTextField.WithSameCenterX(View),
SelectGenderTextField.WithSameCenterY(View)
);
}
class GenderPickerModel : UIPickerViewModel
{
public EventHandler ValueChanged;
public string SelectedGenderByUser;
private List<string> genderList;
public GenderPickerModel(List<string> genderList)
{
this.genderList = genderList;
}
public override nint GetRowsInComponent(UIPickerView pickerView, nint component)
{
return genderList.Count;
}
public override nint GetComponentCount(UIPickerView pickerView)
{
return 1;
}
public override string GetTitle(UIPickerView pickerView, nint row, nint component)
{
return genderList[(int)row];
}
public override void Selected(UIPickerView pickerView, nint row, nint component)
{
var gender = genderList[(int)row];
SelectedGenderByUser = gender;
ValueChanged(null,null);
}
}
class-GenderPickerModel:UIPickerViewModel
{
公共事件处理程序已更改;
公共字符串SelectedGenderByser;
私人名单性别主义者;
公共性别分类模型(列出性别列表)
{
this.genderList=性别列表;
}
公共覆盖nint GetRowsInComponent(UIPickerView pickerView,nint component)
{
返回性别列表。计数;
}
公共覆盖nint GetComponentCount(UIPickerView pickerView)
{
返回1;
}
公共重写字符串GetTitle(UIPickerView-pickerView、nint行、nint组件)
{
返回性别列表[(int)行];
}
已选择公共覆盖无效(UIPickerView pickerView、第九行、第九组件)
{
变量性别=性别列表[(int)行];
SelectedGenderByser=性别;
ValueChanged(null,null);
}
}
可能重复或整洁的好答案!因为他是新来的,所以我发布了所有相关的代码,这样他就不会面对itI上的其他问题。我发现“不相关的代码”非常有用和重要。我唯一无法使用的是所选项目
private void Constraint()
{
View.AddSubviews(SelectGenderTextField);
View.SubviewsDoNotTranslateAutoresizingMaskIntoConstraints();
View.AddConstraints(
SelectGenderTextField.WithRelativeWidth(View, 0.80f),
SelectGenderTextField.WithRelativeHeight(View, 0.05f),
SelectGenderTextField.WithSameCenterX(View),
SelectGenderTextField.WithSameCenterY(View)
);
}
class GenderPickerModel : UIPickerViewModel
{
public EventHandler ValueChanged;
public string SelectedGenderByUser;
private List<string> genderList;
public GenderPickerModel(List<string> genderList)
{
this.genderList = genderList;
}
public override nint GetRowsInComponent(UIPickerView pickerView, nint component)
{
return genderList.Count;
}
public override nint GetComponentCount(UIPickerView pickerView)
{
return 1;
}
public override string GetTitle(UIPickerView pickerView, nint row, nint component)
{
return genderList[(int)row];
}
public override void Selected(UIPickerView pickerView, nint row, nint component)
{
var gender = genderList[(int)row];
SelectedGenderByUser = gender;
ValueChanged(null,null);
}
}