2012-05-30 21 views
16

नोट करके कीबोर्ड को खारिज: वहाँ दो समान अतः सवाल (1)(2) रहे हैं, लेकिन उनमें से कोई भी एक जवाब प्रदान करता है।MonoTouch.Dialog: DialogViewController में कहीं भी छू

टीएल; डीआर: उपयोगकर्ता को मोनो टच में कीबोर्ड को कैसे खारिज कर सकता है। उपयोगकर्ता को दृश्य में किसी रिक्त स्थान को स्पर्श करने के द्वारा?

मैं मोनो टच का उपयोग कर एक ऐप लिख रहा हूं। डायलॉग और यूआईटीएबीबार नियंत्रक। मेरी टैब में से एक "सेटिंग" ...

Settings screen

उपयोगकर्ता टाइपिंग, कीबोर्ड tabbar व्यवधान उत्पन्न शुरू होता है ...

enter image description here

MonoTouch.Dialog, केवल का उपयोग करना है कीबोर्ड को खारिज करने का तरीका अंतिम फ़ील्ड पर जाना है और "वापसी" कुंजी दबाएं। इस तथ्य को ध्यान में रखते हुए कि जब तक कीबोर्ड समाप्त नहीं हो जाता तब तक उपयोगकर्ता कोई टैब नहीं दबा सकता है, मैं इसे करने का बेहतर तरीका चाहूंगा। अर्थात्, अगर उपयोगकर्ता स्क्रीन पर कहीं और टैप करता है तो खारिज कर दें।

मोनो टच के बिना। डियालॉग, यह एक तस्वीर है: बस टच्सबर्ग को ओवरराइड करें और एंड एडिटिंग को कॉल करें। लेकिन यह एमटीडी के साथ काम नहीं करता है। मैंने DialogViewController subclassing और वहाँ TouchesBegan overriding करने की कोशिश की है, लेकिन यह काम नहीं करता है। मैं वर्तमान में एक नुकसान में हूँ।

या, मुझे आश्चर्य है, क्या मैं टैबबार को मिटाने से बेहतर होगा, इसलिए मैं शीर्ष पर "बैक" बटन के साथ एक यूएनविगेशन कंट्रोलर का उपयोग कर सकता हूं, जो कीबोर्ड द्वारा छुपाया नहीं जाएगा?

उत्तर

30

मैं तुम्हें एक टैप जेस्चर पहचानकर्ता कि tableview ईवेंट हैंडलर्स का हस्तक्षेप नहीं होगा का उपयोग करने का सुझाव टेबल व्यू जेस्चर) मोनो टच ओवरराइड करना है। डियालॉग। डायलॉग व्यू कंट्रोलर .सिंग सोर्स (या मोनो टच। डायलॉग।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); 
    } 
} 

}

+0

वह शानदार है। Http://stackoverflow.com/questions/10832014/using-decelerationended-interferes-with-other-callbacks पर आपका उत्तर पढ़ने के बाद मुझे एहसास हुआ कि मेरे समाधान से सड़क पर समस्या आ सकती है। न केवल यह आपकी बेहतर है कि इससे वह संभावना समाप्त हो जाती है, यह सटीक कार्यक्षमता भी प्रदान करता है जिसे मैं ढूंढ रहा था। बहुत - बहुत धन्यवाद! –

+3

आपको भी dvc.CancelsTouchesInView = false जोड़ना होगा; अन्यथा यह पृष्ठ पर आपके सभी अन्य क्लिक रद्द कर देगा! – benpage

+13

टैप जोड़ें .CancelsTouchesInView = false; TapGestureRecognizer को सभी तत्वों पर क्लिक करने से रद्द करने से रोकने के लिए। –

2

तुम भी इसके बारे में मेरे सवाल याद किया: Can the keyboard be dismissed by touching outside of the cell in MonoTouch.Dialog? :-)

यह MonoTouch.Dialog के लिए मेरे # 1 सुविधा का अनुरोध है।

अपने प्रश्न का उत्तर देने के लिए: नहीं। यह संभव नहीं है। मैंने खोज की है और चारों ओर पूछा है और कोई जवाब नहीं मिला है।

मुझे लगता है क्योंकि यह सिर्फ एक खंडित (समूहित) तालिका है और यदि इसे विभाजित नहीं किया गया था, तो क्लिक करने के लिए कोई स्थान नहीं होगा। हालांकि, यह सिर्फ मेरी अटकलें है।

मेरी इच्छा है कि मोनोचच पर काम करने वाले माइग्यूल या कोई ऐसा जवाब दे और कहें कि यह भी संभव है। शायद भविष्य में वृद्धि?

+0

अरे हाँ, मैं आपके सवाल का पढ़ने याद है, क्षमा करें। इस मुद्दे के बारे में यह शर्म की बात है: अन्यथा एमटी.डी एक शानदार पैकेज है। मैं थोड़ी देर के लिए इंतजार करूँगा क्योंकि किसी और के पास जवाब हो सकता है। यदि नहीं, तो मैं तुम्हारा स्वीकार करूंगा। मेरे लिए भी –

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

जब भी उपयोगकर्ता दृश्य को थोड़ा सा ड्रैग करता है तो यह कीबोर्ड को खारिज कर देगा। टेबलव्यू से जुड़े कोई स्पर्श ईवेंट नहीं है, इसलिए यह अगली सबसे अच्छी बात है। मैं किसी अन्य विचार का स्वागत करता हूं। चीयर्स! के रूप में प्रस्तावित नल के बजाय खींच इशारा उपयोग करने के लिए (जो साथ हस्तक्षेप नहीं करते

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

उपर्युक्त अन्य तालिका दृश्य घटनाओं में हस्तक्षेप करेगा, इशारा पहचानकर्ता का उपयोग करें, जैसा कि मैंने इस प्रश्न में अपने उत्तर में दिखाया है। –