2012-05-30 61 views
16

注駁回鍵盤:有兩個相似的,所以問題(1)(2),但他們都沒有提供一個答案。MonoTouch.Dialog:在任何地方DialogViewController觸摸

TL; DR:如何通過讓用戶觸摸視圖中的空白空間來解除MonoTouch.Dialog中的鍵盤?

我正在使用MonoTouch.Dialog和UITabBarController編寫應用程序。我的一個選項卡中的 「設置」 ...

Settings screen

當用戶開始輸入,鍵盤阻礙的TabBar ...

enter image description here

使用MonoTouch.Dialog,唯一的關閉鍵盤的方法是轉到最後一個字段並按下「返回」鍵。考慮到用戶無法按下任何標籤,直到鍵盤消失,我想要一個更好的方式來做到這一點。也就是說,如果用戶點擊屏幕上的其他任何位置,則解散。

沒有MonoTouch.Dialog,它很簡單:只需重寫TouchesBegan並調用EndEditing。但這不適用於MT.D.我已經嘗試繼承DialogViewController並重寫TouchesBegan,但它不起作用。我目前處於虧損狀態。

或者,我不知道,我會更好的開瓶器,所以我可以使用一個UINavigationController與頂部的「後退」按鈕,這將不會被鍵盤隱藏?

回答

30

我建議你使用點擊手勢識別,不會與TableView中的事件處理程序造成干擾:

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

太棒了。在閱讀你的答案http://stackoverflow.com/questions/10832014/using-decelerationended-interferes-with-other-callbacks我意識到我的解決方案可能會導致問題的道路上。你不僅更好,它消除了這種可能性,它還提供了我正在尋找的確切功能。太感謝了! –

+3

您還必須添加dvc.CancelsTouchesInView = false;否則這將取消您網頁上的所有其他點擊! – benpage

+13

add tap.CancelsTouchesInView = false;以防止TapGestureRecognizer取消點擊所有元素。 –

2

你錯過了我的問題,它也:Can the keyboard be dismissed by touching outside of the cell in MonoTouch.Dialog? :-)

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

回答你的問題:不可以。我已經搜查了四周,並沒有找到任何答案。

我假設,因爲它只是一個分區(分組)表,如果它沒有分段,就沒有任何點擊。不過,這只是我的猜測。

我希望米格爾或某人在monotouch上工作會回答這個問題,並說如果它甚至是可能的。可能是未來的增強?

+0

哦,是的,我記得以前看過你的問題,對不起。這個問題令人慚愧:否則MT.D是一個出色的軟件包。我會等一會兒,別人可能會有答案。如果沒有,我會接受你的。 –

+0

對我來說也是如此。這似乎並不難實施。 – nicolas

1

我想出了一個解決方法,可以很好地滿足我,所以我正在回答我自己的問題。

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

這會在用戶拖動視圖時忽略鍵盤。我沒有找到與tableview相關的觸摸事件,所以這是第二好的事情。我歡迎任何其他想法。乾杯!

+1

以上將干擾其他TableView事件,使用手勢識別器,正如我在這個問題的答案中所示。 –

0

的一個解決方法使用拖動手勢來代替自來水作爲提議(即不與干預表視圖手勢)是重寫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); 
    } 
} 

}

相關問題