2012-01-22 10 views
13

क्या UIView में वर्तमान में सक्रिय UITextField या UITextView प्राप्त करना संभव है, इसलिए मैं कीबोर्ड को [text resignFirstResponder]; से छुपा सकता हूं?वर्तमान में सक्रिय UITextField/UITextView कैसे प्राप्त करें और इस्तीफा दें फर्स्ट रेस्पॉन्डर?

+0

संभावित डुप्लिकेट [मैं कैसे निर्धारित कर सकता हूं वर्तमान में UITextField चयनित है?] (http://stackoverflow.com/questions/8956704/how-can-i-determine-the-uitextfield-currently- चयनित) –

उत्तर

27

आईओएस 2.0 के रूप में और बाद में, कीबोर्ड के बिना एचएवी को खारिज करने का एक आसान तरीका है वर्तमान में सक्रिय नियंत्रण को ट्रैक करने, या सभी उपलब्ध नियंत्रणों के माध्यम से पुनरावृत्त करने, या UITextFieldDelegate का उपयोग करने के लिए।

[self.view endEditing:YES] 

डॉक्स से:

endEditing:

दृश्य का कारण बनता है (या इसके एम्बेडेड पाठ क्षेत्रों में से एक) करने के लिए पहले प्रत्युत्तर स्थिति इस्तीफा देने।

- (BOOL) endEditing :(BOOL) बल

पैरामीटर
बल
निर्दिष्ट YES इस्तीफा देने के लिए, चाहे वह ऐसा करने के लिए चाहता है की परवाह किए बिना पहले प्रत्युत्तर के लिए मजबूर करने।

वापसी मूल्य
YES यदि दृश्य पहले प्रत्युत्तर स्थिति या NO इस्तीफा दे दिया है, तो ऐसा नहीं किया।

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

के लिए

func findActiveResponderFrame(view:UIView)->UIView?{ 
    if view.isFirstResponder() { 
    return view 
    } else { 
    for sub in view.subviews { 
     if let subView = sub as? UIView, 
      found = findActiveResponderFrame(subView){ 
     return found 
     } 
    } 
    } 
    return nil 
} 
0

यदि आप विशेष रूप से उत्तरदाता टेक्स्ट फ़ील्ड लाने के लिए चाहते हैं तो आप निम्न का पालन कर सकते हैं। Get the current first responder without using a private API

आप कर सकते हैं भी कोड निम्न का उपयोग करता है, तो आप केवल सक्रिय पाठ क्षेत्र कुंजीपटल खारिज करना चाहते

- (BOOL)textFieldShouldReturn:(UITextField *)textField { 
    [textField resignFirstResponder]; 
    return YES; 
} 
+0

मुझे यह कोड कहां रखना चाहिए? – Tyilo

+0

और यह UITextView के साथ काम नहीं करेगा, है ना? – Tyilo

+0

टेक्स्ट व्यू के लिए निम्नलिखित देखें- http://stackoverflow.com/questions/703754/how-to-dismiss-keyboard-for-uitextview-with-return-key – rishi

5

कोई रास्ता सीधे क्या वस्तु वर्तमान प्रथम प्रत्युत्तर है प्राप्त करने के लिए (है कि मैं के बारे में पता नहीं है, कम से कम) उन्हें व्यक्तिगत रूप से परीक्षण किए बिना।

- (void)dismissKeyboard { 
    if (myTextField1.isFirstResponder) { 
     [myTextField1 resignFirstResponder]; 
    } 
    else if (myTextField2.isFirstResponder) { 
     [myTextField2 resignFirstResponder]; 
    } 
    else if (myTextField3.isFirstResponder) { 
     [myTextField3 resignFirstResponder]; 
    } 
    else if (myTextField4.isFirstResponder) { 
     [myTextField4 resignFirstResponder]; 
    } 
} 

वास्तविकता में, हालांकि, मैं इसे इस तरह से करने के लिए करते हैं, कि क्या एक विशेष पहले परीक्षण के बिना: इस प्रकार आप क्या कर सकते, एक विधि सभी subviews जो क़यास सक्रिय पहले प्रत्युत्तर हो सकता युक्त बनाने के लिए है UIView वर्तमान प्रथम प्रत्युत्तर है, और नहीं लगता कि किसी भी सराहनीय प्रदर्शन हिट/मुद्दा (है कि मैं वैसे भी देखा है) है है:

- (void)dismissKeyboard { 
    //Send resignFirstResponder message to all possible first responders... 
    [myTextField1 resignFirstResponder]; 
    [myTextField2 resignFirstResponder]; 
    [myTextField3 resignFirstResponder]; 
    [myTextField4 resignFirstResponder]; 
} 

आशा है कि मदद करता है ...

+2

यह आवश्यक नहीं है, [self.view endEditing: YES] ; करूँगा –

5

यह तेजी से कोड पहले प्रत्युत्तर खोजने में काम करता है

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
    self.view.endEditing(true) 
} 
0

अद्यतन इस समारोह स्विफ्ट 3 में किसी भी सक्रिय पाठ फ़ील्ड के कुंजीपटल खाल:

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

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