MonoTouch.Dialog:在任何地方DialogViewController触摸键盘驳回(M

2019-06-24 23:59发布

注:有两个相似的,所以问题(1) (2) ,但他们都没有提供一个答案。

TL; DR:一个人怎么可以让用户接触任何空的空间视图解雇的MonoTouch.Dialog键盘?

我正在写使用MonoTouch.Dialog和的UITabBarController的应用程序。 我的一个选项卡中的“设置” ...

当用户开始打字,键盘妨碍的TabBar ...

使用MonoTouch.Dialog,驳回键盘的唯一途径是去最后一个字段,然后按“返回”键。 考虑到一个事实,即用户不能按任何标签,直到键盘走了,我想一个更好的方式来做到这一点。 也就是说,如果用户点击任何地方在屏幕上解雇。

如果没有MonoTouch.Dialog,这是一个管理单元:只需覆盖的touchesBegan和呼叫EndEditing。 但是,这并不与MT.D.工作 我试着子类DialogViewController并重写的touchesBegan存在,但它不能正常工作。 我目前处于亏损状态。

或者说,我不知道,我会过得更好开沟的TabBar,所以我可以用一个UINavigationController与顶部的“返回”按钮,它不会被键盘被隐藏?

Answer 1:

我建议你使用点击手势识别,不会与TableView中的事件处理程序造成干扰:

var tap = new UITapGestureRecognizer ();
tap.AddTarget (() => dvc.View.EndEditing (true));
dvc.View.AddGestureRecognizer (tap);
tap.CancelsTouchesInView = false;


Answer 2:

你错过了我的问题,它也: 可在键盘在触摸MonoTouch.Dialog细胞外被解雇? :-)

这是我的MonoTouch.Dialog#1的功能要求。

要回答你的问题:不,它是不可能的。 我已经搜索并打听,并没有发现任何答案。

我假设,因为它只是一个切片(分组)表,如果它不是切片,就不会有任何位置单击。 然而,这只是我的猜测。

我希望米格尔或有人上MonoTouch的工作会回答这个问题,并说如果它甚至有可能。 可能是未来增强?



Answer 3:

我想通了,我满意不够好解决办法,所以我回答我的问题。

// 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);
};

这将解雇当用户拖动视图中的点点键盘。 还有我能找到与实现代码如下相关的触控事件,所以这是一个最好的事情。 我欢迎任何其他的想法。 干杯!



Answer 4:

一种解决方法使用拖动手势来代替自来水作为提议(即不与表视图手势干扰)被覆盖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