注:有两个相似的,所以问题(1) (2) ,但他们都没有提供一个答案。
TL; DR:一个人怎么可以让用户接触任何空的空间视图解雇的MonoTouch.Dialog键盘?
我正在写使用MonoTouch.Dialog和的UITabBarController的应用程序。 我的一个选项卡中的“设置” ...
当用户开始打字,键盘妨碍的TabBar ...
使用MonoTouch.Dialog,驳回键盘的唯一途径是去最后一个字段,然后按“返回”键。 考虑到一个事实,即用户不能按任何标签,直到键盘走了,我想一个更好的方式来做到这一点。 也就是说,如果用户点击任何地方在屏幕上解雇。
如果没有MonoTouch.Dialog,这是一个管理单元:只需覆盖的touchesBegan和呼叫EndEditing。 但是,这并不与MT.D.工作 我试着子类DialogViewController并重写的touchesBegan存在,但它不能正常工作。 我目前处于亏损状态。
或者说,我不知道,我会过得更好开沟的TabBar,所以我可以用一个UINavigationController与顶部的“返回”按钮,它不会被键盘被隐藏?
我建议你使用点击手势识别,不会与TableView中的事件处理程序造成干扰:
var tap = new UITapGestureRecognizer ();
tap.AddTarget (() => dvc.View.EndEditing (true));
dvc.View.AddGestureRecognizer (tap);
tap.CancelsTouchesInView = false;
你错过了我的问题,它也: 可在键盘在触摸MonoTouch.Dialog细胞外被解雇? :-)
这是我的MonoTouch.Dialog#1的功能要求。
要回答你的问题:不,它是不可能的。 我已经搜索并打听,并没有发现任何答案。
我假设,因为它只是一个切片(分组)表,如果它不是切片,就不会有任何位置单击。 然而,这只是我的猜测。
我希望米格尔或有人上MonoTouch的工作会回答这个问题,并说如果它甚至有可能。 可能是未来增强?
我想通了,我满意不够好解决办法,所以我回答我的问题。
// I already had this code to set up the dialog view controller.
var bc = new BindingContext (this, settings, "Settings");
var dvc = new DialogViewController (bc.Root, false);
// **** ADD THIS ****
dvc.TableView.DraggingStarted += (sender, e) => {
dvc.View.EndEditing (true);
};
这将解雇当用户拖动视图中的点点键盘。 还有我能找到与实现代码如下相关的触控事件,所以这是一个最好的事情。 我欢迎任何其他的想法。 干杯!
一种解决方法使用拖动手势来代替自来水作为提议(即不与表视图手势干扰)被覆盖MonoTouch.Dialog.DialogViewController.SizingSource(或MonoTouch.Dialog.DialogViewController.Source如果你不想不均行),并把它交给DialogViewController。 我不知道这是否是很干净的还是安全。
public class CustomTableViewSource : MonoTouch.Dialog.DialogViewController.SizingSource
{
public CustomTableViewSource(MonoTouch.Dialog.DialogViewController dvc) : base(dvc)
{
}
public override void DraggingStarted(UIScrollView scrollView)
{
base.DraggingStarted(scrollView);
if (scrollView != null)
{
scrollView.EndEditing(true);
}
}
}
文章来源: MonoTouch.Dialog: Dismissing keyboard by touching anywhere in DialogViewController