MonoTouch.Dialog: Отключение клавиатуры, касаясь в любом месте DialogViewController - программирование
Подтвердить что ты не робот

MonoTouch.Dialog: Отключение клавиатуры, касаясь в любом месте DialogViewController

ПРИМЕЧАНИЕ. Есть два похожих вопроса SO (1) (2), но ни один из них не дает ответа.

TL; DR: Как можно отбросить клавиатуру в MonoTouch.Dialog, позволяя пользователю коснуться любого пустого пространства в представлении?

Я пишу приложение, используя MonoTouch.Dialog и UITabBarController. Одна из моих вкладок - "Настройки"...

Settings screen

Когда пользователь начинает печатать, клавиатура препятствует табуляции...

enter image description here

Используя MonoTouch.Dialog, единственный способ отклонить клавиатуру - перейти в последнее поле и нажать клавишу "возврат". Учитывая тот факт, что пользователь не может нажать любую вкладку до тех пор, пока клавиатура не исчезнет, ​​я бы хотел, чтобы это было лучше. А именно: отклонить, если пользователь нажимает на другое место на экране.

Без MonoTouch.Dialog это легко: просто переопределите TouchesBegan и вызовите EndEditing. Но это не работает с MT.D. Я пробовал подклассифицировать DialogViewController и переопределять TouchesBegan там, но он не работает. Я сейчас в растерянности.

Или, мне интересно, лучше ли мне помещать вкладку, чтобы я мог использовать UINavigationController с кнопкой "Назад" сверху, которая не будет скрыта клавиатурой?

4b9b3361

Ответ 1

Я предлагаю вам использовать распознаватель жестов, который не будет создавать помехи обработчикам событий TableView:

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

Ответ 2

Вы также пропустили мой вопрос: Можно ли отклонить клавиатуру, коснувшись внешней ячейки в MonoTouch.Dialog? : -)

Это мой # 1 запрос функции для MonoTouch.Dialog.

Чтобы ответить на ваш вопрос: Нет. Это невозможно. Я искал и спросил и не нашел ответов.

Я предполагаю, что это всего лишь разделенная (сгруппированная) таблица, и если она не была разделена на разделы, не было бы места для клика. Однако это только мои предположения.

Я хочу, чтобы miguel или кто-то, кто работает над monotouch, ответил бы на это и сказал, если это возможно. Возможно, будущее улучшение?

Ответ 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);
};

Это отклонит клавиатуру всякий раз, когда пользователь немного перетаскивает представление. Там нет события касания, которое я мог бы найти связанным с табличным представлением, так что это следующая лучшая вещь. Я бы приветствовал любые другие идеи. Ура!

Ответ 4

Один способ обхода жестов перетаскивания вместо того, чтобы предлагать (который не мешает жесту табличного вида), - это переопределить MonoTouch.Dialog.DialogViewController.SizeSource(или MonoTouch.Dialog.DialogViewController.Source, если вы наняли, t хотите неровные строки) и передать его в 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);
   }
 }

}