- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
所以我正在使用 Xamarin 并尝试创建一个图像渲染器,当点击该渲染器时将显示适用于 iOS 的 UIDatePicker。我有适用于 Android 的渲染器,但我无法让日期选择器在 iOS 上显示。我的代码在渲染器的下面,我调试了它,我一直通过 mTextField.BecomeFirstResponder();我“认为”会使日期选择器显示出来。
谁能指出我正确的方向?我只需要那个选择器显示在屏幕上。一旦我可以显示它,我就可以随心所欲地处理它。
private void _DatePickerHasBeenTapped( object sender, EventArgs e )
{
if( mDatePickerDialog != null )
{
mDatePickerDialog.TouchCancel -= _DatePickerDialogOnCancelEvent;
mDatePickerDialog.ValueChanged -= _DatePickerDialogOnValueChanged;
}
var date = mDatePicker.PickerDate == DateTime.MinValue
? DateTime.Today
: mDatePicker.PickerDate;
mTextField = new UITextField();
mDatePickerDialog = new UIDatePicker { Mode = UIDatePickerMode.Date, TimeZone = new NSTimeZone( "UTC" ) };
mDatePickerDialog.ValueChanged += _DatePickerDialogOnValueChanged;
mDatePickerDialog.SetDate( date.ToNSDate(), false );
var width = UIScreen.MainScreen.Bounds.Width;
var toolbar = new UIToolbar( new RectangleF( 0, 0, (float)width, 44 ) ) { BarStyle = UIBarStyle.Default, Translucent = true };
var spacer = new UIBarButtonItem( UIBarButtonSystemItem.FlexibleSpace );
var doneButton = new UIBarButtonItem( UIBarButtonSystemItem.Done, ( o, a ) => mDatePickerDialog.ResignFirstResponder() );
toolbar.SetItems( new[] { spacer, doneButton }, false );
mTextField.InputView = mDatePickerDialog;
mTextField.InputAccessoryView = toolbar;
if( mTextField.CanBecomeFirstResponder )
{
mTextField.BecomeFirstResponder();
}
}
最佳答案
如果实际显示了 UITextField
,您的方法就会起作用。现在您可以通过将 UITextField 添加到 VC View 层次结构但用负 cgrect 抵消它以使其离开屏幕并在 UIBarButtonItem
处理程序之后将其删除来破解它:
var mTextField = new UITextView(new CGRect(-1000, -1000, 10, 10));
yourViewController.Add(mTextField);
注意:我已经看到屏幕外控件的响应器失败并在我需要它们作为虚假响应器时避免它们,但我知道其他人会这样做......用户当心...... :-/
或者:
您可以通过编程方式或从包含选择器和关闭 按钮的 Storyboard 设计一个 UIViewController,并在用户点击您的图像时显示它。点击关闭按钮,关闭 Controller 并将您的选择器日期发送到某处...
或者:
对于这样的事情,我通常使用弹出式样式的 View Controller 。
var parentVC = this; // This would the "main" Form's ViewController, obtain it within your renderer
PopoverDelegate popoverDelegate = null;
var datePicker = new UIDatePicker(new CGRect(0, 0, parentVC.View.Frame.Width, 300));
popoverDelegate = new PopoverDelegate(datePicker, (date) =>
{
// Post the date change back to Forms via an event, etc...
Console.WriteLine($"Date Choosen: {date}");
datePicker.Dispose();
popoverDelegate.Dispose();
});
using (var popOverStyleVC = new UIViewController
{
ModalPresentationStyle = UIModalPresentationStyle.Popover
})
{
var pc = popOverStyleVC.PopoverPresentationController;
{
pc.Delegate = popoverDelegate;
pc.SourceView = parentVC.View;
pc.SourceRect = imageButton.Frame; // a CGRect where you want the popup arrow to point
}
popOverStyleVC.PreferredContentSize = datePicker.Frame.Size;
popOverStyleVC.View.Add(datePicker);
parentVC.PresentViewController(popOverStyleVC, true, null);
}
上面缺少的部分是UIPopoverPresentationControllerDelegate
,因为您有通过返回
其他弹出窗口未正确显示,这也是我捕获解雇并提供日期回调的地方。UIModalPresentationStyle.None
>UIModalPresentationStyle GetAdaptivePresentationStyle
public class PopoverDelegate : UIPopoverPresentationControllerDelegate
{
public delegate void DatePicked(NSDate date);
UIDatePicker datePicker;
DatePicked datePicked;
public PopoverDelegate(UIDatePicker datePicker, DatePicked datePicked)
{
this.datePicked = datePicked;
this.datePicker = datePicker;
}
public override UIModalPresentationStyle GetAdaptivePresentationStyle(UIPresentationController forPresentationController)
{
return UIModalPresentationStyle.None;
}
public override void DidDismissPopover(UIPopoverPresentationController popoverPresentationController)
{
datePicked(datePicker.Date);
}
}
关于c# - Xamarin 从 Image Tap 显示 iOS UIDatePicker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46132074/
有什么区别 $('.classname').on('click tap', function(){}); 在第二种情况下,事件之间有一个 OR 符号('||') $('.classname').on(
在我的完整日历中,我不想支持拖动选择。仅应在一个插槽中创建事件。在普通浏览器中它运行良好(我只是添加到选择 X 分钟)。我遇到的问题是,在移动设备上,您需要长按并拖动才能触发我的“添加事件”功能。 有
我有一组为 Jenkins 生成 JUnit 输出的脚本。 我执行的代码看起来像这样(这只是一个片段,所以你明白了): #!/usr/bin/env perl
我有一个 JQuery Mobile 页面,其中的内容是一个列表,用户可以在其中点击以选择(突出显示)元素。选择所需数量的列表元素后,可以通过点击页脚中的删除按钮将其删除。该页面在我的桌面上运行良好,
我正在使用 TAP-Windows(来自 OpenVPN 项目)创建一个界面,如所述 here和 here .我的代码基于第一篇文章中提供的示例: const string UsermodeDevic
我使用 TAP::Formatter::HTML 运行一些 TAP 测试。 这个 CPAN 模块生成漂亮的动态 HTML 报告,但我想使用通过测试、失败测试等的数量 - 在所有测试完成后将它们插入数据
我在应用程序中有一个按钮。我希望它根据我是点击它(暂停动画)还是双击(重新启动动画)来做不同的事情 但是,当我双击时,它似乎先触发点击事件,然后快速连续双击。有没有解决的办法?这是一个已知问题还是我犯
问题是关于要使用 Tun/Tap 模块的 Linux 主机的正确配置。 我的目标: 利用现有的路由软件(下文中的 APP1 和 APP2),但拦截和修改它发送和接收的所有消息(由 Mediator 完
我已阅读 SO question: Controller for Buttons Sencha Touch 2 [Solved]实现点击按钮。有用! 不幸的是,我需要点击容器,而不是按钮。一旦我改变x
我似乎无法让 heroku 到 db:push,即使我已经安装了水龙头。它似乎不相信我。我还检查并在这里找到了一个文件夹:/Library/Ruby/Gems/1.8/gems/taps-0.2.23
我正在使用 Appcelerator for Android 应用程序, 在我设置 accessibilityHint 属性后,Talkback 说完这个字符串,暂停并始终说“双击激活,双击并按住长按
我正在尝试通过 Tapinstall 在 Windows 中控制 OpenVPN TAP 驱动程序的多个实例。似乎因为所有设备都有相同的 HWID - 'tap0901' - 我无法使用 tapins
我对 JQuery 移动“点击”事件有一个真正的问题。它发射了两次,我似乎无法阻止它。 问题是我有一页index.html,当您点击按钮时,您会转到page2.html。问题是,当您快速点击时,您将移
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我认为这将是一个奇怪的问题,但我想知道这是否可能。如果我正在使用一个我无法控制的库,如果它有一个具有虚函数的实体类,并且库本身正在创建这些实体,如 Entity* e = new Entity(),有
跟随 Apple 的 Guide to build a MealKeeper app ,我能够创建一个文本字段和一个 ImageView 。将 UITapGestureRecognizer 拖放到 I
我已经使用点击手势识别器制作了一个可点击的 View ,它工作得很好。但我想在触摸发生时突出显示 View ,并在触摸结束时将其删除。 我试过这个: - (IBAction)refresh:(UITa
有人能用简单的语言解释一下我们用来观察输出的普通可观察运算符和似乎具有相同功能的 do/tap 之间的区别吗?为什么我们要使用 do/tap? 最佳答案 RxJS v6+ 中的 do/tap 运算符或
我正在开发一个通过 Tap 阅读的程序。唯一的问题是,我不知道如何检测一个传输到分路器的结束和另一个传输的开始。 从水龙头读取数据的方式是否与 SOCK_STREAM 相同? 最佳答案 Tun/tap
这是我的简单测试代码: def test_function 0.tap do |v| v += 10 end end p test_function 为什么我在这里得到 0?我在等着得
我是一名优秀的程序员,十分优秀!