Picker in Xamarin.iOS available

2020-02-06 07:10发布

Is iOS Picker available in the Xamarin.iOS? I have searched throughly but there is neither example nor information has been founded; however, it is available in Xamarin.Form.

3条回答
够拽才男人
2楼-- · 2020-02-06 07:38
public class GenderPicker : UIViewController
{
    public TestVC() { }


    UITextField SelectGenderTextField = new UITextField();
    UIPickerView GenderPicker = new UIPickerView();

    public override void ViewDidLoad()
    {
        base.ViewDidLoad();
        AddTextField();
        GenderTextField();


        Constraint();
    }
}

Textfield To Show The Selected Data

    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.

    }

Gender Picker

    private void GenderTextField()
    {
        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
        };

     }

Constraints

    // Used Cirrious.FluentLayouts.Touch For Constraints
    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)


            );
    }

Picker Model Class

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


}

UIPickerView Example With TextField In Xamarin.iOS Gender Selecter

查看更多
迷人小祖宗
3楼-- · 2020-02-06 07:43

Yes it is. The native iOS control is called UIPickerView

查看更多
姐就是有狂的资本
4楼-- · 2020-02-06 07:49

A real quickie example of a UIPickerView: (iOS SDK)

enter image description here

Add a UIPickerView to your xib or Storyboard called slotMachineView:

using System;
using UIKit;

namespace Slots
{
    public partial class ViewController : UIViewController
    {
        public ViewController (IntPtr handle) : base (handle)
        {
        }

        public override void ViewDidLoad ()
        {
            base.ViewDidLoad ();
                slotMachineView.Model = new StackOverflowModel (selectedLbl);
        }

        public override void DidReceiveMemoryWarning ()
        {
            base.DidReceiveMemoryWarning ();
        }
    }

    public class StackOverflowModel : UIPickerViewModel
    {
        static string[] names = new string [] {
            "pscorlib.dll",
            "pscorlib_aot.dll",
            "Mono.PlayScript.dll",
            "PlayScript.Dynamic.dll",
            "PlayScript.Dynamic_aot.dll",
            "PlayScript.Optimization.dll",
            "playshell.exe",
            "psc.exe"
        };

        UILabel lbl;

        public StackOverflowModel (UILabel lbl)
        {
            this.lbl = lbl;
        }

        public override nint GetComponentCount (UIPickerView v)
        {
            return 3;
        }

        public override nint GetRowsInComponent (UIPickerView pickerView, nint component)
        {
            return names.Length;
        }

        public override string GetTitle (UIPickerView picker, nint row, nint component)
        {
            switch (component) {
            case 0:
                return names [row];
            case 1:
                return row.ToString ();
            case 2:
                return new string ((char)('A' + row), 1);
            default:
                throw new NotImplementedException ();
            }
        }

        public override void Selected (UIPickerView picker, nint row, nint component)
        {
            lbl.Text = String.Format ("{0} : {1} : {2}",
                names [picker.SelectedRowInComponent (0)],
                picker.SelectedRowInComponent (1),
                picker.SelectedRowInComponent (2));
        }

        public override nfloat GetComponentWidth (UIPickerView picker, nint component)
        {
            if (component == 0)
                return 220f;
            else
                return 30f;
        }
    }
}
查看更多
登录 后发表回答