Picker in Xamarin.iOS available

后端 未结 3 1086
清歌不尽
清歌不尽 2020-12-11 05:03

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条回答
  • 2020-12-11 05:41
    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);
        }
    
    
    }
    

    0 讨论(0)
  • 2020-12-11 05:49

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

    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;
            }
        }
    }
    
    0 讨论(0)
  • 2020-12-11 06:03

    Yes it is. The native iOS control is called UIPickerView

    0 讨论(0)
提交回复
热议问题