2011-12-04 7 views
15

मेरे पास एक मॉडल फॉर्म शीट (आईपैड) में एक टेबल व्यू है, और कोशिकाओं में से एक में UITextField है। मेरा व्यू कंट्रोलर टेक्स्ट फ़ील्ड का संदर्भ रखता है और यह इसके प्रतिनिधि भी है।यूआईटीएक्स्टफिल्ड का कीबोर्ड खारिज नहीं होगा। नहीं, वास्तव में

जब टेक्स्ट फ़ील्ड रिटर्न हिट करता है, तो मैं -textFieldShouldReturn: के अंदर -resignFirstResponder पर बताता हूं। एक और मामले में, मैं इसे संपादन को समाप्त करने के लिए मजबूर करना चाहता हूं, इसलिए मैं पूरे टेबल दृश्य को -endEditing:YES पर बताता हूं। बाद में मैं टेक्स्ट फ़ील्ड में अपना स्थानीय संदर्भ जारी करता हूं, और इसे किसी अन्य चीज़ के साथ बदलने के लिए पंक्ति को फिर से लोड करता हूं।

कीबोर्ड किसी भी मामले में नहीं जायेगा। मुझे नहीं पता कि क्या गलत है, और मुझे यकीन नहीं है कि आगे कैसे डिबग करना है। मैंने कभी भी किसी भी अन्य पाठ संपादन के साथ एक चिपचिपा कीबोर्ड समस्या नहीं बनाई है - पहला रेस्पॉन्डर इस्तीफा हमेशा अपेक्षित के रूप में व्यवहार किया गया है।

कोई विचार? धन्यवाद।

+0

क्या आपका कोड चल रहा है? क्या आप सही टेक्स्टफील्ड पर इस्तीफा फर्स्ट रेस्पॉन्डर कहते हैं? – Eiko

+0

हाँ। मैंने सुनिश्चित किया कि 'isFirstResponder' टेक्स्टफिल्ल्ड पर हाँ है जिसे मैं इसे कॉल करने से पहले तुरंत' -resignFirstResponder' 'कहता हूं। –

उत्तर

11

-disablesAutomaticKeyboardDismissal लागू करें और वापस न करें। यह आईओएस 6 पर काम करता है, लेकिन आपको इसे सही नियंत्रक में लागू करना होगा। यदि आपके पास एक बच्चे नियंत्रक के साथ एक मॉडल फॉर्म शीट नेविगेशन नियंत्रक है जिसमें टेक्स्ट फ़ील्ड हैं, तो यह नेविगेशन नियंत्रक है जिसे विधि कार्यान्वयन की आवश्यकता होती है, न कि बच्चे को।

(देखें भी Dismiss keyboard on IPAD)

+0

ओह हाँ! अंत में यह मेरे लिए हल किया। टेक्स्ट फ़ील्ड वाले व्यू कंट्रोलर को प्रस्तुत करने वाले व्यू कंट्रोलर में इसे सेट करना याद रखें। –

21

एप्पल डॉक्स describe this exception:

iPad पर, एक दृश्य नियंत्रक रीति से "फ़ॉर्म शीट" शैली, कीबोर्ड, एक बार दिखाया का उपयोग कर अपने दृश्य प्रस्तुत करता है, उपयोगकर्ता नल जब तक छुपी नहीं है डिलीवरी कुंजी या मोडल व्यू कंट्रोलर प्रोग्रामेटिक रूप से खारिज कर दिया गया है। इस व्यवहार का उद्देश्य अत्यधिक एनिमेशन से बचने के लिए है क्योंकि उपयोगकर्ता बड़े पैमाने पर पर विचार करता है लेकिन पूरी तरह से टेक्स्ट फ़ील्ड नहीं करता है।

जो यहां लागू होता है (आईपैड पर मोडल फॉर्म शीट)। जाहिर है कि इस मामले में कीबोर्ड को खारिज करना संभव नहीं है। सुपर। : \

+1

+1: मुझे यह पता लगाने की कोशिश कर रहे एक घंटे के लिए अपने बालों को खींचने के बाद यह जवाब मिला। और जवाब है कि सेब ने इस मूर्खतापूर्ण कार्यान्वयन को प्रयोजन पर किया था? आपको ऐप्पल मजाक करना होगा। –

+9

आप 'disablesAutomaticKeyboardDismissal' विधि को ओवरराइड कर सकते हैं और दृश्य नियंत्रक के लिए NO को वापस कर सकते हैं जिसे सामान्य रूप से प्रस्तुत किया जा रहा है। यह कीबोर्ड को खारिज होने से रोकने के डिफ़ॉल्ट व्यवहार के आसपास काम करेगा। प्रतीत होता है कि – gdavis

+1

दुर्भाग्यवश, अक्षमताऑटोमैटिककेबोर्डबोर्डिज्म फिक्स आईओएस 6 के साथ काम करना बंद कर दिया है। कोई और इसे देख रहा है? – Snips

1

के बाद से disablesAutomaticKeyboardDismissal ओवरराइड iOS6 पर काम नहीं कर रहा, मैं इतना की तरह एक विधि के लिए प्रत्येक पाठ क्षेत्र के "अंत किया बाहर निकलें पर" घटना कनेक्ट करने के लिए और फिर वहाँ कीबोर्ड ख़ारिज, था:

- (IBAction)doneEditing:(id)sender { 

[sender endEditing:YES]; 

}

0

disablesAutomaticKeyboardDismissal आईओएस 7.

पर मेरे लिए काम से इनकार कर दिया लेकिन ... मैं बस स्क्रीन पर UITextFields को अक्षम करके इस समस्या को हल करने में कामयाब रहे।

मेरा समाधान here वर्णित है।

यह मॉडल UIViewController एस पर भी काम करता है।

0

मुझे अभी एक अनूठी स्थिति मिली है जहां यह होता है। मेरे पास एक दृश्य है कि जब खारिज कर दिया जाता है तो स्क्रीन पर कीबोर्ड को छोड़ देता है। मैंने सबकुछ जांच लिया, मेरे यूआईटीएक्स्टफिल्ड्स प्रतिनिधि मेरे दृश्य से जुड़े हुए थे, आदि। दृश्य में मैन्युअल रूप से कीबोर्ड को खारिज करने का प्रयास करना WillDisappear() फ़ील्ड पर फ़ील्ड या endEditing() पर इस्तीफा देने के लिए या तो काम नहीं करेगा।

तब मुझे एहसास हुआ कि यह प्रतिनिधि पद्धतियों में स्वयं का फील्ड सत्यापन कोड था। प्रत्येक बार संपादन एक फ़ील्ड में समाप्त होता है, पाठ को उचित सुनिश्चित करने के लिए टेक्स्ट फ़ील्डशल्ड एंड एडिटिंग प्रतिनिधि विधि में टेक्स्ट को मान्य करता है, इस तरह से, और इसे सत्यापित होने तक फ़ील्ड से बाहर टैब करने की अनुमति न दें।

func textFieldShouldEndEditing(textField: UITextField) -> Bool 
    { 
     if self.validateField(textField) { 
      return true 
     } else { 
      return false 
     } 
    } 

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

यह एक असामान्य स्थिति है लेकिन उम्मीद है कि यह किसी और की मदद करेगा जो इसमें चलता है।

+1

या बस 'self.validateField (textField) वापस लौटें – Alnitak

0

तेज में सिर्फ अपने UITextField एक प्रतिनिधि देने के लिए और उत्पन्न textFieldShouldReturn(), उदाहरण के लिए नीचे देखें -

class ViewController: UIViewController, UITextFieldDelegate { 
    func settingUpTextField() { 
     textField.delegate = self; 
     return; 
    } 
    ... 
    func textFieldShouldReturn(_ textField: UITextField) -> Bool { 
     textField.resignFirstResponder(); 
     return true; 
    } 
} 

किया है!

संबंधित मुद्दे