【问题标题】:How to display Drop Down in xamarin form. IOS如何以 xamarin 形式显示下拉菜单。 IOS
【发布时间】:2021-05-05 13:49:11
【问题描述】:

这是我的 IOS IPad 页面我想显示下拉菜单,如图所示,请帮助我如何编写代码, 我为此使用了选择器,但菜单项显示在底部,我如何解决此问题

【问题讨论】:

    标签: xaml xamarin xamarin.forms drop-down-menu xamarin.ios


    【解决方案1】:

    这是一种通过“控件组合”实现这种“下拉”的解决方法。

    首先,在视图上添加一个 UITextField 以显示所选项目。

    UITextField _dropTextField;
    UIView _dropDownView;
    UIPickerView _pickerView;
    
    public override void ViewDidLoad()
    {
        base.ViewDidLoad();
        // Perform any additional setup after loading the view, typically from a nib.
        this.View.BackgroundColor = UIColor.White;
    
        // add textfield
        _dropTextField = new UITextField();
        _dropTextField.Frame = new CGRect(100, 100, 300, 30);
        _dropTextField.BackgroundColor = UIColor.Gray;
        this.View.AddSubview(_dropTextField);
        // call CreateDropDownView
        CreateDropDownView();
    }
    

    其次,定义一个创建自定义 UIView 的方法,并持有一个 UIPickerView。

    // create a custom UIView to show pickView
    private void CreateDropDownView()
    {
        _dropDownView = new UIView(new CGRect(_dropTextField.Frame.X, _dropTextField.Frame.Y,
            _dropTextField.Frame.Width, 300));
        _dropTextField.Delegate = this;
        _pickerView = new UIPickerView();
        _pickerView.Frame = new CGRect(_dropTextField.Bounds.X, _dropTextField.Bounds.Y + _dropTextField.Frame.Height, _dropTextField.Frame.Width, 300);
        PeopleModel pickerModel = new PeopleModel(_dropTextField, _dropDownView);
        _pickerView.Model = pickerModel;
        _dropDownView.AddSubview(_pickerView);
    }
    

    那么,要在TextField获得焦点时显示UIView,还需要实现接口IUITextFieldDelegate

    // show pickerview
    [Export("textFieldShouldBeginEditing:")]
    public bool ShouldBeginEditing(UITextField textField)
    {
        View.AddSubview(_dropDownView);
        UIApplication.SharedApplication.KeyWindow.BringSubviewToFront(_pickerView);
        return false;
    }
    

    至于上述代码中的PeopleModel,请参考本documentation中的“类PeopleModel”。另外,你需要重写其中的一些方法。

    private UITextField dropTextField;
    private UIView dropDownView;
    
    public PeopleModel(UITextField dropTextField, UIView dropDownView)
    {
        this.dropDownView = dropDownView;
        this.dropTextField = dropTextField;
    }
    
    public override nint GetComponentCount(UIPickerView pickerView)
    {
        return 1;
    }
    
    // ...
    
    public override void Selected(UIPickerView pickerView, nint row, nint component)
    {
        dropDownView.RemoveFromSuperview();
        dropTextField.Text = $"{names[pickerView.SelectedRowInComponent(0)]}";
    }
    
    // ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-13
      • 1970-01-01
      • 1970-01-01
      • 2010-12-07
      • 1970-01-01
      • 1970-01-01
      • 2012-05-27
      • 1970-01-01
      相关资源
      最近更新 更多