दिलचस्प पोस्ट
संपूर्ण परियोजना खोजें और बदलें (नेटबीन्स) पूरी तालिका पंक्ति लिंक करें? तीर शैली परिवर्तन का चयन करें IPhone सैंडबॉक्स (दस्तावेज़ फ़ोल्डर) में सभी फ़ाइलों को हटा रहा है? जावास्क्रिप्ट में टैब कुंजी समारोह अनुकरण मैं emacs की हाइलाइट लाइनें कैसे कर सकता हूं जो 80 से अधिक वर्णों पर चलती हैं? एक दूरस्थ सर्वर से अमेज़ॅन EC2 पर mysql से कनेक्ट करें जब स्थिर सी ++ क्लास सदस्यों को आरंभ किया जाता है? एंड्रॉइड में, लाइनर लेआउट बच्चों के बीच स्थान कैसे बना सकता है? कंस्ट्रक्टर से टेम्प्लेट पैरामीटर का अनुमान क्यों न करें? क्या rvalue संदर्भों के लिए कोई संदर्भ_चैपर <> है? __मैन__.py क्या है? सूचियों को ट्यूपल्स की सूची में कैसे मर्ज करना है? रेल बनाम नया बना PostgreSQL में एक अस्थायी फ़ंक्शन कैसे बनाएं?

iPhone, यूआईटीextफिल्ड के बाहर छूते हुए कीबोर्ड को खारिज कर देते हैं

मैं सोच रहा हूं कि उपयोगकर्ता UITextField बाहर छूता है जब कुंजीपटल गायब हो जाता है?

Solutions Collecting From Web of "iPhone, यूआईटीextफिल्ड के बाहर छूते हुए कीबोर्ड को खारिज कर देते हैं"

आपको एक UITapGestureRecogniser को जोड़ना UITapGestureRecogniser और इसे दृश्य में निर्दिष्ट करना होगा, और उसके बाद उस पर चयनकर्ता पर UITextField पर पहले उत्तरदाता को कॉल करें।

कोड:

दृश्य डीडलोड में

 UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)]; [self.view addGestureRecognizer:tap]; 

किबोर्ड को खारिज में:

 -(void)dismissKeyboard { [aTextField resignFirstResponder]; } 

(जहां aTextField है जो कुंजीपटल के लिए ज़िम्मेदार है)

स्विफ्ट 3 संस्करण ऐसा दिखता है

 let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.dismissKeyboard (_:))) self.view.addGestureRecognizer(tapGesture) 

के-बोर्ड को खारिज करने के लिए

 func dismissKeyboard (_ sender: UITapGestureRecognizer) { aTextField.resignFirstResponder() } 

मैं कुछ जवाब मिलाया

दृश्य के दौरान आरंभ किए जाने वाले एक आविर का उपयोग करेंडिडलोड:

 UIGestureRecognizer *tapper; - (void)viewDidLoad { [super viewDidLoad]; tapper = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)]; tapper.cancelsTouchesInView = NO; [self.view addGestureRecognizer:tapper]; } 

जो वर्तमान में संपादन कर रहे हैं उसे ख़ारिज करें:

 - (void)handleSingleTap:(UITapGestureRecognizer *) sender { [self.view endEditing:YES]; } 

यह जांचें, यह ऐसा करने का सबसे आसान तरीका होगा,

 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ [self.view endEditing:YES];// this will do the trick } 

या

यह लाइब्रेरी स्क्रॉलबार ऑटो स्क्रॉलिंग को नियंत्रित करेगा, कुंजीपटल को छुपाने के लिए स्थान टैप करें, आदि …

https://github.com/michaeltyson/TPKeyboardAvoiding

मैं देख रहा हूं कि कुछ लोगों के पास यूआईटीएपीएजिस्टररेक्जरीकर्ता विधि का उपयोग करते हुए समस्याएं हैं I सबसे आसान तरीका है कि मैंने अभी भी अपने मौजूदा बटन के टैप व्यवहार को छोड़कर इस कार्यक्षमता को पूरा किया है, केवल जेनसेन 2 के उत्तर के लिए एक ही पंक्ति जोड़ रहा है:

 [tap setCancelsTouchesInView:NO]; 

यह मेरे मौजूदा बटनों को अभी भी @ डमिटरी Sitnikov की विधि का उपयोग किए बिना काम कर सकता है

उस संपत्ति के बारे में यहां पढ़ें ("कैनकल्सटूइन्स इनव्यू" के लिए खोज करें): UIGestureRecognizer वर्ग संदर्भ

मुझे यकीन नहीं है कि यह स्क्रॉलबार के साथ कैसे काम करेगा, जैसा कि मैंने देखा कि कुछ लोगों के साथ समस्याएं हैं, लेकिन उम्मीद है कि किसी और को उसी परिदृश्य में चला सकता है जो मेरे पास था।

अपने UIView को UIControl का एक उदाहरण (इंटरफ़ेस बिल्डर में) बनाने और फिर अपने "टच अप इनसाइड" ईवेंट को केबीबोर्ड विधि को खारिज करने के लिए जोड़ना बेहतर है। यह IBAction विधि की तरह दिखेगी :

 - (IBAction)dismissKeyboard:(id)sender { [aTextBox resignFirstResponder]; } 

स्विफ्ट संस्करण, यह अन्य तत्वों (जैसे UIButton या अन्य UITextField ) के संयोजन में कार्य करता है:

 override func viewDidLoad() { super.viewDidLoad() let tapper = UITapGestureRecognizer(target: self, action:#selector(endEditing)) tapper.cancelsTouchesInView = false view.addGestureRecognizer(tapper) } 

इसके बारे में कैसे: मुझे पता है यह एक पुरानी पोस्ट है यह किसी को मदद कर सकता है 🙂

 -(void)touchesEnded: (NSSet *) touches withEvent: (UIEvent *) event { NSArray *subviews = [self.view subviews]; for (id objects in subviews) { if ([objects isKindOfClass:[UITextField class]]) { UITextField *theTextField = objects; if ([objects isFirstResponder]) { [theTextField resignFirstResponder]; } } } } 

यह एक अच्छा सामान्य समाधान है:

उद्देश्य सी:

 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [self.view endEditing:YES]; } 

स्विफ्ट:

 override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { self.view.endEditing(true) } 

@ सनोडबस्टर समाधान के आधार पर: https://stackoverflow.com/a/18756253/417652

मुझे लगता है कि ऐसा करने के लिए सबसे आसान (और सबसे अच्छा) तरीका यह है कि आपके वैश्विक दृश्य को उप-वर्ग और hitTest का उपयोग करें: किसी भी स्पर्श को सुनने के लिए ऐवेंट विधि के साथ। कीबोर्ड पर छूएं पंजीकृत नहीं हैं, इसलिए hitTest: साथ ही जब आप / स्क्रोल / ज़ोर से मारना / चुटकी को छूते हैं, तो केवल ऐव्वेट किया जाता है … और फिर [स्व अंत संपादन: हाँ] को कॉल करें।

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

इसके अलावा, यह [textField resignFirstResponder] को कॉल करने से बेहतर है, क्योंकि आपके पास कई पाठ फ़ील्ड स्क्रीन पर हो सकते हैं, इसलिए यह उन सभी के लिए काम करता है

यह बाहर छूकर अपने कीबोर्ड को छुपाने का सबसे आसान तरीका होना चाहिए:

 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [self.view endEditing:YES]; } 

( कैसे पाठ से बाहर अन्य क्षेत्र को टैप करने के लिए कीबोर्ड को कैसे खारिज करना है? )

यदि मुझे आपको मिल गया है तो आप textfield बाहर की ओर से कुंजीपटल विली टैपिंग को इस्तीफा देना चाहते हैं, लेकिन आपके पास अपने टेक्स्टफ़ील्ड का संदर्भ नहीं है।

इसे इस्तेमाल करे;

  • वैश्विक reftextField ले लो, इसे reftextField कहते हैं
  • अब textFieldDidBeginEditing संदर्भित पाठ फ़ील्ड को सेट करने के लिए

     - (void) textFieldDidBeginEditing:(UITextField *)textField{ reftextField = textField; } 
  • अब आप खुशी से किसी भी बटन घड़ी पर उपयोग कर सकते हैं, (अनुशंसित संपादन शुरू करने पर एक पारदर्शी बटन जोड़ना)

     - (void)dismissKeyboard { [reftextField resignFirstResponder]; } 
  • या फिर से इस्तीफा देने के लिए यह कोशिश करें।

     //for resigning on done button - (BOOL) textFieldShouldReturn:(UITextField *)textField{ [textField resignFirstResponder]; return YES; } 

आप यह XCode 6 और इसके बाद के संस्करण में स्टोरीबोर्ड का उपयोग करके कर सकते हैं:

कुंजीपटल को छिपाने के लिए कार्रवाई करें

इसे अपने ViewController द्वारा उपयोग किए गए क्लास की हैडर फ़ाइल में जोड़ें:

 @interface TimeDelayViewController : UIViewController <UITextFieldDelegate> - (IBAction)dissmissKeyboardOnTap:(id)sender; @end 

फिर इसे उसी ViewController की कार्यान्वयन फ़ाइल में जोड़ें:

 - (IBAction)dissmissKeyboardOnTap:(id)sender{ [[self view]endEditing:YES]; } 

यह अब आपके स्टोरीबोर्ड दृश्य (यानी व्यू नियंत्रक) के लिए 'प्राप्त क्रियाओं' में से एक होगा:

यहां छवि विवरण दर्ज करें

उपयोगकर्ता घटना के लिए कार्रवाई को हुक करें

अब आपको कीबोर्ड को छूने के उपयोगकर्ता के संकेत को इस क्रिया को हुक करनी है।

महत्वपूर्ण – आपको UIControl के लिए स्टोरीबोर्ड में शामिल 'UIView' को बदलने की आवश्यकता है , इसलिए यह ईवेंट प्राप्त कर सकता है। अपने दृश्य नियंत्रक दृश्य पदानुक्रम से दृश्य का चयन करें:

यहां छवि विवरण दर्ज करें

… और इसके वर्ग को परिवर्तित करें:

यहां छवि विवरण दर्ज करें

अब अपने दृश्य के 'रिक्त' भाग पर (वास्तव में आप यूआईकंट्रोल के लिए 'प्राप्त क्रिया' को खींच रहे हैं) पर अपने दृश्य के लिए 'प्राप्त की गई कार्रवाई' के आगे छोटे वृत्त से खींचें। आपको उन घटनाओं का एक चयन दिखाया जाएगा, जिन्हें आप अपनी कार्रवाई को हुक कर सकते हैं:

यहां छवि विवरण दर्ज करें

विकल्प के अंदर 'टच अप' का चयन करें आपने अब कीबोर्ड को छूने की यूजर एक्शन के लिए बनाए IBAction को हुक कर लिया है। जब उपयोगकर्ता कुंजीपटल बंद करता है, तो यह अब छिपा होगा

(नोट: इस घटना के लिए कार्रवाई को हुक करने के लिए, आप अपने दृश्य नियंत्रक पदानुक्रम में यूआईकंट्रोल पर सीधे प्राप्त कार्रवाई से खींच सकते हैं। यह पदानुक्रम में 'नियंत्रण' के रूप में प्रदर्शित किया गया है।)

आप UITextField के बाहर क्लिक करके कीबोर्ड को खारिज करने के लिए UITapGestureRecongnizer विधि का उपयोग कर सकते हैं। इस विधि का उपयोग करके जब उपयोगकर्ता UITextField के बाहर क्लिक करेगा तो कीबोर्ड बर्खास्त हो जाएगा। नीचे इसका उपयोग करने के लिए कोड स्निपेट है

  UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissk)]; [self.view addGestureRecognizer:tap]; //Method - (void) dismissk { [abctextfield resignFirstResponder]; [deftextfield resignFirstResponder]; } 

बस यहाँ सूची में जोड़ने के लिए कैसे बाहर स्पर्श पर एक कीबोर्ड को खारिज करने के अपने संस्करण।

viewDidLoad:

 UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)]; [self.view addGestureRecognizer:singleTap]; 

कहीं भी:

 -(void)handleSingleTap:(UITapGestureRecognizer *)sender{ [textFieldName resignFirstResponder]; puts("Dismissed the keyboard"); } 

UITapGestureRecognizer का उपयोग करने के बारे में बहुत सारे अच्छे उत्तर यहां दिए गए हैं – जिनमें से सभी UITapGestureRecognizer स्पष्ट (एक्स) बटन को तोड़ते हैं। समाधान अपने प्रतिनिधि के माध्यम से इशारे पहचानकर्ता को दबाने के लिए है:

 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { BOOL touchViewIsButton = [touch.view isKindOfClass:[UIButton class]]; BOOL touchSuperviewIsTextField = [[touch.view superview] isKindOfClass:[UITextField class]]; return !(touchViewIsButton && touchSuperviewIsTextField); } 

यह सबसे मजबूत समाधान नहीं है लेकिन यह मेरे लिए काम करता है

यदि दृश्य UIScrollView में सभी में एम्बेड किया गया है, तो आप निम्न का उपयोग कर सकते हैं:

 tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag; tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeInteractive; 

जब स्क्रीन दृश्य स्क्रॉल किया जाएगा और बाद में स्टॉक संदेश ऐप की तरह कीबोर्ड को छिपाएगा, तो स्क्रीन पर आने वाले कुंजीपटल को सजीव करना होगा।

ध्यान दें कि ये IOS 7.0 या इसके बाद के संस्करण पर उपलब्ध हैं।

आप UiView के लिए श्रेणी बना सकते हैं और छू सकते हैं I

यह मेरे लिए ठीक काम कर रहा है। और यह इस समस्या के लिए समाधान केंद्रित है।

 #import "UIView+Keyboard.h" @implementation UIView(Keyboard) - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [self.window endEditing:true]; [super touchesBegan:touches withEvent:event]; } @end 

@ जेन्सेन 2 के उत्तर के स्विफ्ट संस्करण:

 let gestureRecognizer : UITapGestureRecognizer = UITapGestureRecognizer.init(target: self, action: "dismissKeyboard") self.addGestureRecognizer(gestureRecognizer) func dismissKeyboard() { aTextField.resignFristResponder() } 

एक लाइन

 self.view.addTapGesture(UITapGestureRecognizer.init(target: self, action: "endEditing:")) 

मैं अपने नए विकास के लिए बैरी उदाहरण का इस्तेमाल किया। यह महान काम किया! लेकिन मुझे थोड़ी-सी बदलाव शामिल करना था, जिसे केवल टेक्स्टफील्ड संपादित करने के लिए कीबोर्ड को खारिज करना आवश्यक था।

इसलिए, बैरी का उदाहरण मुझे निम्नलिखित में जोड़ा गया:

 - (void) textFieldDidBeginEditing:(UITextField *)textField { _textBeingEdited = textField; } -(void) textFieldDidEndEditing:(UITextField *)textField { _textBeingEdited = nil; } 

इसके अलावा, मैं HideOyboard विधि को निम्नानुसार बदल दिया है:

 - (IBAction)hideKeyboard:(id)sender { // Just call resignFirstResponder on all UITextFields and UITextViews in this VC // Why? Because it works and checking which one was last active gets messy. //UITextField * tf = (UITextField *) sender; [_textBeingEdited resignFirstResponder]; } 

सबसे आसान और सबसे छोटा रास्ता यह है कि यह कोड आपके viewDidLoad जोड़ना है

 [self.view addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self.view action:@selector(endEditing:)]]; 

संदेश resignFirstResponder को textfiled है कि इसे वहाँ डाल दिया। अधिक जानकारी के लिए कृपया इस पोस्ट को देखें।

यह काम

इस उदाहरण में, aTextField एकमात्र UITextField है …. अगर कोई अन्य या UITextViews हैं, तो एक छोटे से अधिक करना है।

 // YourViewController.h // ... @interface YourViewController : UIViewController /* some subclass of UIViewController */ <UITextFieldDelegate> // <-- add this protocol // ... @end // YourViewController.m @interface YourViewController () @property (nonatomic, strong, readonly) UITapGestureRecognizer *singleTapRecognizer; @end // ... @implementation @synthesize singleTapRecognizer = _singleTapRecognizer; // ... - (void)viewDidLoad { [super viewDidLoad]; // your other init code here [self.view addGestureRecognizer:self.singleTapRecognizer]; { - (UITapGestureRecognizer *)singleTapRecognizer { if (nil == _singleTapRecognizer) { _singleTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapToDismissKeyboard:)]; _singleTapRecognizer.cancelsTouchesInView = NO; // absolutely required, otherwise "tap" eats events. } return _singleTapRecognizer; } // Something inside this VC's view was tapped (except the navbar/toolbar) - (void)singleTapToDismissKeyboard:(UITapGestureRecognizer *)sender { NSLog(@"singleTap"); [self hideKeyboard:sender]; } // When the "Return" key is pressed on the on-screen keyboard, hide the keyboard. // for protocol UITextFieldDelegate - (BOOL)textFieldShouldReturn:(UITextField*)textField { NSLog(@"Return pressed"); [self hideKeyboard:textField]; return YES; } - (IBAction)hideKeyboard:(id)sender { // Just call resignFirstResponder on all UITextFields and UITextViews in this VC // Why? Because it works and checking which one was last active gets messy. [aTextField resignFirstResponder]; NSLog(@"keyboard hidden"); } 

मैंने कई प्रतिक्रियाओं की कोशिश की और यहां कोई भाग्य नहीं था। मेरा टैप इशारे पहचानकर्ता हमेशा मेरे UIButtons को तब टेप किए जाने पर प्रतिसाद नहीं दे रहा था, जब भी मैं रद्द करता हूं, तो इशारा पहचानकर्ता की नं।

आखिरकार इस मुद्दे को हल करने का यही तरीका है:

एक इवर:

 UITapGestureRecognizer *_keyboardDismissGestureRecognizer; 

जब पाठ फ़ील्ड संपादन शुरू होता है, तो संकेत पहचानकर्ता सेट करें:

 - (void) textFieldDidBeginEditing:(UITextField *)textField { if(_keyboardDismissGestureRecognizer == nil) { _keyboardDismissGestureRecognizer = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)] autorelease]; _keyboardDismissGestureRecognizer.cancelsTouchesInView = NO; [self.view addGestureRecognizer:_keyboardDismissGestureRecognizer]; } } 

फिर चाल यही है कि आपने कैसे केबीबोर्ड विधि को खारिज कर दिया है:

 - (void) dismissKeyboard { [self performSelector:@selector(dismissKeyboardSelector) withObject:nil afterDelay:0.01]; } - (void) dismissKeyboardSelector { [self.view endEditing:YES]; [self.view removeGestureRecognizer:_keyboardDismissGestureRecognizer]; _keyboardDismissGestureRecognizer = nil; } 

मुझे लगता है कि टच हैंडलिंग निष्पादन स्टैक के बाहर केबोर्ड चयनकर्ता निष्पादन को खारिज करने के बारे में कुछ ही है …

 - (void)viewDidLoad { [super viewDidLoad]; UITapGestureRecognizer *singleTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)]; [singleTapGestureRecognizer setNumberOfTapsRequired:1]; [singleTapGestureRecognizer requireGestureRecognizerToFail:singleTapGestureRecognizer]; [self.view addGestureRecognizer:singleTapGestureRecognizer]; } - (void)handleSingleTap:(UITapGestureRecognizer *)recognizer { [self.view endEditing:YES]; [textField resignFirstResponder]; [scrollView setContentOffset:CGPointMake(0, -40) animated:YES]; } 

इस कोड को अपने ViewController.m फ़ाइल में जोड़ें:

 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [self.view endEditing:YES]; } 
 override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { if let touch = touches.first{ view.endEditing(true) } } 

इस स्थिति में, ScrollView का उपयोग किया जा सकता है और ScrollView में TextField में जोड़ दिया गया है और मैं ScrollView दृश्य को टैप करना चाहता हूं और फिर कीबोर्ड को ख़ारिज करना चाहते हैं। मैंने नमूना कोड सिर्फ मामले में बनाने की कोशिश की। इस कदर,

 import UIKit class ViewController: UIViewController { @IBOutlet weak var scrollView: UIScrollView! @IBOutlet weak var textField: UITextField! override func viewDidLoad() { super.viewDidLoad() let tapGesture = UITapGestureRecognizer(target: self, action: #selector(ViewController.tap(_:))) view.addGestureRecognizer(tapGesture) // Do any additional setup after loading the view, typically from a nib. } func tap(gesture: UITapGestureRecognizer) { textField.resignFirstResponder() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } 

आपका स्टोरीबोर्ड देखो कि बस की तरह

यहां छवि विवरण दर्ज करें

  • टेक्स्ट फ़ील्ड को देखने में प्रतिनिधि को लोड किया गया था:

     override func viewDidLoad() { super.viewDidLoad() self.userText.delegate = self } 
  • इस फ़ंक्शन को जोड़ें:

     func textFieldShouldReturn(userText: UITextField!) -> Bool { userText.resignFirstResponder() return true; } 

स्विफ्ट में इस के साथ संघर्ष करने वालों के लिए यह जेन्सेन 2 के द्वारा स्वीकृत जवाब है लेकिन स्विफ्ट में है

स्विफ्ट 2.3

  override func viewDidLoad() { //..... let viewTapGestureRec = UITapGestureRecognizer(target: self, action: #selector(handleViewTap(_:))) //this line is important viewTapGestureRec.cancelsTouchesInView = false self.view.addGestureRecognizer(viewTapGestureRec) //..... } func handleViewTap(recognizer: UIGestureRecognizer) { myTextField.resignFirstResponder() } 

बस अपने। मी फ़ाइल में इस कोड का उपयोग करें, जब टेक्स्टफ़ाइल के बाहर यूजर नल जाएंगे तो वह टेक्स्टफीयर को इस्तीफा दे देगा।

  -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ [textfield resignFirstResponder]; }