如何在 Xamarin.ios 中使 UIDatePicker 标签不可见但仍具有交互性?

时间:2021-07-01 07:58:18

标签: ios swift xamarin xamarin.ios

我需要在我的 Xamarin.ios 项目中以编程方式打开一个 UIDatePicker。不幸的是,这是不允许的,也没有公共 api。但是我得到了一些技巧,这些技巧来自 Open UIDatePicker programmatically in iOS 14 我正在尝试实现这个技巧:https://stackoverflow.com/a/65430977/13026962 我设法在我的标签上添加了一个 UIDatePicker。这是我的代码:

            lblFromDate.UserInteractionEnabled = false;
            var datePicker = new UIDatePicker(new CGRect(x: lblFromDate.Frame.X, y: 
            lblFromDate.Frame.Y, width: lblFromDate.Frame.Width, height: lblFromDate.Frame.Height));
            datePicker.Mode = UIDatePickerMode.Date;
            datePicker.ValueChanged += DatePicker_ValueChanged;
            Add(datePicker);

enter image description here

但我想以某种方式隐藏日期选择器,但仍然需要它具有交互性,以便在点击标签时(实际上是点击日期选择器),日期选择器动画出来。

第二个问题是我想在点击任何日期时关闭日历模式。但我发现只有价值改变事件。是否可以以编程方式关闭日历模式,对我来说会有很大帮助。这是点击日期选择器后弹出的日历模式:

enter image description here

1 个答案:

答案 0 :(得分:3)

对于你的第一个问题: 您可以将日期选择器的 PerferredDatePickerStyle 设置为紧凑,并将日期选择器上的标签颜色设置为白色以覆盖日期选择器。还设置标签的 启用为假。 代码如:

mydatapicker.PerferredDatePickerStyle=UIDatePickerStyle.Compact;
mylabel.BackgroundColor=UIColor.White;
//.....  

要更改它的文本,请添加以下代码:

mydatapicker.valuechanged+=Datepicker_Valuechanged;
private void Datepicker_Valuechanged(object sender,EventArgs e) 
{mylabel.Text=mydatapicker.Date.ToString();}

你的第二个问题 当点击任何日期时,恐怕没有合适的方法来关闭日历模式。

希望这些对您有所帮助。

1.在storyboard中,设置label的启用为false。 enter image description here

2.点击前

enter image description here

3.点击

enter image description here

4.值改变后

enter image description here

5.代码隐藏

enter image description here