दिलचस्प पोस्ट
कोको एप्लिकेशन से एप्पल स्क्रिप्ट चलाएं कोबेर्टुरा के साथ कोड कवरेज के तरीकों को बाहर निकालें क्या करता है .for.Aach.call () जावास्क्रिप्ट में करते हैं? कैसे एक jdk संस्करण को .class फ़ाइल को संकलित करने के लिए प्रयोग किया जाता है कोड से androidManifest के "debuggable" मान हो रहा है? पार प्रारंभिकता के संकेत क्या हैं? ओपनसीवी 2.4 वीडियोकैपचर विंडोज पर काम नहीं कर रहा है ExpireTimeSpan को पुनर्जन्म करने के बाद की उपेक्षा की गई IDentity / MVC पहचान में मान्य अवधि (2.0.1) मैं जावा में विश्वसनीय रूट प्रमाणपत्रों की एक सूची कैसे प्राप्त करूं? एंड्रॉइड स्टूडियो का नाम बदलें पैकेज पृष्ठ स्थान परिवर्तन होने पर टैम्प्रमोंकी स्क्रिप्ट को याद करें आईओएस स्वचालित रूप से पाठ क्षेत्र में हाइफ़न जोड़ें बीच में रिक्त स्थान सहित VBA में प्रयुक्त अंतिम पंक्ति का निर्धारण कैसे करें केवल संदर्भ संदर्भ को संदर्भ से लौटा देना चाहिए – कोडाइग्निटर org.glassfish.jersey.servlet.ServletContainer क्लास नोटफ़ाउंड अपवाद

वापसी कुंजी के साथ UITextView के लिए कीबोर्ड को कैसे खारिज करें?

आईबी की लाइब्रेरी में, परिचय हमें बताता है कि जब वापसी की कुंजी दबाई जाती है, तो UITextView लिए कीबोर्ड गायब हो जाएगा। लेकिन वास्तव में वापसी कुंजी केवल '\ n' के रूप में कार्य कर सकती है।

कीबोर्ड को छिपाने के लिए मैं एक बटन जोड़ सकते हैं और [txtView resignFirstResponder] का उपयोग कर सकते हैं

लेकिन क्या कुंजीपटल में वापसी की कुंजी के लिए कार्रवाई जोड़ने का एक तरीका है ताकि मुझे UIButton जोड़ने की आवश्यकता न हो?

Solutions Collecting From Web of "वापसी कुंजी के साथ UITextView के लिए कीबोर्ड को कैसे खारिज करें?"

UITextView कोई भी तरीका नहीं है, जब उपयोगकर्ता रिटर्न कुंजी को हिट करेंगे। यदि आप चाहते हैं कि उपयोगकर्ता केवल एक ही पंक्ति की पाठ्य को जोड़ सके, तो UITextField उपयोग करें। UITextView लिए वापसी और कुंजीपटल छुपाने पर इंटरफ़ेस दिशानिर्देशों का पालन नहीं करता है।

तब भी अगर आप ऐसा करना चाहते हैं, तो textView:shouldChangeTextInRange:replacementText: लागू करें textView:shouldChangeTextInRange:replacementText: UITextViewDelegate विधि और उस जांच में अगर प्रतिस्थापन पाठ \n , कीबोर्ड को छिपाना

वहाँ अन्य तरीकों से हो सकता है लेकिन मैं किसी से अवगत नहीं हूँ

यह पता लगा था कि मैं इसके बजाय यहां स्निपेट पोस्ट करूँगा:

सुनिश्चित करें कि आप UITextViewDelegate प्रोटोकॉल के लिए समर्थन की घोषणा करते हैं।

 - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { if([text isEqualToString:@"\n"]) { [textView resignFirstResponder]; return NO; } return YES; } 

स्विफ्ट 4.0 अपडेट:

 func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { if (text == "\n") { textView.resignFirstResponder() return false } return true } 

मुझे पता है कि यह पहले से ही उत्तर दिया गया है लेकिन मैं सचमुच न्यूलाइन के लिए स्ट्रिंग का इस्तेमाल नहीं करना पसंद कर रहा हूं, इसलिए ये है कि मैंने क्या किया।

 - (BOOL)textView:(UITextView *)txtView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { if( [text rangeOfCharacterFromSet:[NSCharacterSet newlineCharacterSet]].location == NSNotFound ) { return YES; } [txtView resignFirstResponder]; return NO; } 

स्विफ्ट 4.0 अपडेट:

 func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { if (text as NSString).rangeOfCharacter(from: CharacterSet.newlines).location == NSNotFound { return true } txtView.resignFirstResponder() return false } 

मुझे पता है कि इसे कई बार उत्तर दिया गया है, लेकिन इस मुद्दे पर मेरे दो सेंट हैं।

मुझे नमूने और रिबेटो के उत्तर वास्तव में उपयोगी हैं, और रिब्बेटो के जवाब में अधिकतम शक्ति की टिप्पणी भी मिली है। लेकिन उन तरीकों के साथ एक समस्या है समस्या यह है कि मैट ने समस्वरेट के उत्तर में उल्लेख किया है और यह है कि यदि उपयोगकर्ता इसके अंदर एक लाइन ब्रेक के साथ कुछ पेस्ट करना चाहता है, तो कुंजीपटल कुछ भी चिपकाने के बिना छुपाएगा

तो मेरा दृष्टिकोण तीन उपर्युक्त समाधानों का एक मिश्रण है और केवल जांचता है कि स्ट्रिंग में प्रवेश एक नई पंक्ति है जब स्ट्रिंग की लंबाई 1 है, इसलिए हमें यह सुनिश्चित करना है कि उपयोगकर्ता चिपकाने के बजाय टाइप कर रहा है।

यहां मैंने जो किया है:

 - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { NSRange resultRange = [text rangeOfCharacterFromSet:[NSCharacterSet newlineCharacterSet] options:NSBackwardsSearch]; if ([text length] == 1 && resultRange.location != NSNotFound) { [textView resignFirstResponder]; return NO; } return YES; } 

कीबोर्ड का फ्रेम के बाहर कहीं न कहीं उपयोगकर्ता कुंजीपटल को खारिज करने के लिए एक और अधिक सुंदर तरीका है।

सबसे पहले, UIBuilder में पहचान निरीक्षक में वर्ग "UIControl" को अपने ViewController के दृश्य सेट करें। ViewController की हैडर फ़ाइल में दृश्य को नियंत्रित करें और इसे टच अप इनसाइड के रूप में ईवेंट के साथ एक लिंक के रूप में लिंक करें, जैसे:

ViewController.h

 -(IBAction)dismissKeyboardOnTap:(id)sender; 

मुख्य व्यू नियंत्रक फ़ाइल में, ViewController.m:

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

समान तकनीकों का उपयोग करके आपको एक डबल टैप या लंबी स्पर्श की आवश्यकता हो सकती है। आपको अपने व्यू नियंत्रक को UITextViewDelegate के रूप में सेट करना पड़ सकता है और TextView को ViewController से कनेक्ट कर सकते हैं। यह विधि दोनों UITextView और UITextField के लिए काम करती है।

स्रोत: बिग बेवकूफ खेत

संपादित करें: मैं यह भी जोड़ना चाहूंगा कि यदि आप यूआईएसक्रोलव्यू का उपयोग कर रहे हैं, तो ऊपर की तकनीक इंटरफ़ेस बिल्डर के माध्यम से आसानी से काम नहीं कर सकती है। उस स्थिति में, आप एक UIGestureRecognizer का उपयोग कर सकते हैं और [[स्वयं दृश्य] एंडएडिंग कॉल कर सकते हैं: हाँ] विधि इसके बजाय एक उदाहरण होगा:

 -(void)ViewDidLoad{ .... UITapGestureRecognizer *tapRec = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)]; [self.view addGestureRecognizer: tapRec]; .... } -(void)tap:(UITapGestureRecognizer *)tapRec{ [[self view] endEditing: YES]; } 

जब उपयोगकर्ता कुंजीपटल के बाहर टैप करता है और कोई एंट्री स्पेस टैप नहीं करता है, तो कुंजीपटल खारिज कर देगा।

इस विधि को अपने दृश्य नियंत्रक में जोड़ें

स्विफ्ट :

 func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool { if text == "\n" { textView.resignFirstResponder() return false } return true } 

यह विधि भी आपके लिए सहायक हो सकती है:

 /** Dismiss keyboard when tapped outside the keyboard or textView :param: touches the touches :param: event the related event */ override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { if let touch = touches.anyObject() as? UITouch { if touch.phase == UITouchPhase.Began { textField?.resignFirstResponder() } } } 
 -(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { if([text isEqualToString:@"\n"]) [textView resignFirstResponder]; return YES; } yourtextView.delegate=self; 

इसके अलावा UITextViewDelegate जोड़ें

प्रोटोकॉल की पुष्टि करने के लिए मत भूलना

यदि आप नहीं जोड़ते हैं if([text isEqualToString:@"\n"]) आप संपादित नहीं कर सकते

Uitextview के साथ उपयोग करते समय एक और समाधान है, आप "textViewShouldBeginEditing" में InputAccessoryView के रूप में टूलबार जोड़ सकते हैं, और इस टूलबार से किए गए बटन से आप कीबोर्ड को खारिज कर सकते हैं, इसके लिए कोड निम्न है:

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

 toolBar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 44)]; //toolbar is uitoolbar object toolBar.barStyle = UIBarStyleBlackOpaque; UIBarButtonItem *btnDone = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(btnClickedDone:)]; [toolBar setItems:[NSArray arrayWithObject:btnDone]]; 

टेक्स्ट विज़ुअल में विधिवत विधि

 - (BOOL)textViewShouldBeginEditing:(UITextView *)textView { [textView setInputAccessoryView:toolBar]; return YES; } 

बटन दबाने की कार्रवाई में जो टूलबार में है निम्नलिखित है:

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

कीबोर्ड को खारिज करने के लिए एक बार होस्ट करने के लिए नेविगेशन नियंत्रक का उपयोग करना:

.h फ़ाइल में:

  UIBarButtonItem* dismissKeyboardButton; 

.m फ़ाइल में:

 - (void)viewDidLoad { dismissKeyboardButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(dismissKeyboard)]; } -(void)textViewDidBeginEditing:(UITextView *)textView { self.navigationItem.rightBarButtonItem = dismissKeyboardButton; } -(void)textFieldDidBeginEditing:(UITextField *)textField { self.navigationItem.rightBarButtonItem = dismissKeyboardButton; } -(void)dismissKeyboard { [self.textField resignFirstResponder]; [self.textView resignFirstResponder]; //or replace this with your regular right button self.navigationItem.rightBarButtonItem = nil; } 

समरूपता के लिए मैट टिप्पणी की तरह, मुझे "\ n" या तो पता लगाने का विचार पसंद नहीं है I "रिटर्न" कुंजी, यूआईटीक्शस्वीव में एक कारण के लिए है, जो कि अगली पंक्ति के पाठ्यक्रम पर जाना है।

मेरी राय में सबसे अच्छा समाधान आईफोन संदेश एप की नकल करना है – जो कीबोर्ड पर उपकरण पट्टी (और बटन) जोड़ना है

मुझे ब्लॉग पोस्ट निम्नलिखित से मिला:

http://www.iosdevnotes.com/2011/02/iphone-keyboard-toolbar/

कदम:

अपने XIB फ़ाइल में टूलबार जोड़ें- ऊंचाई 460 पर सेट करें

टूलबार बटन आइटम जोड़ें (यदि पहले से नहीं जोड़ा गया है) यदि आपको इसे सही-संरेखित करने की आवश्यकता है, तो XIB में लचीला बार बटन आइटम भी जोड़ें और टूलबार बटन आइटम को स्थानांतरित करें

-आपके बटन आइटम को इस्तीफा देने के लिए लिंक का अनुसरण करें- पहले रिस्पॉन्डर का पालन करें:

 - (IBAction)hideKeyboard:(id)sender { [yourUITextView resignFirstResponder]; } 

-फिर:

 - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil]; } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil]; [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil]; } - (void)keyboardWillShow:(NSNotification *)notification { [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:0.3]; CGRect frame = self.keyboardToolbar.frame; frame.origin.y = self.view.frame.size.height - 260.0; self.keyboardToolbar.frame = frame; [UIView commitAnimations]; } - (void)keyboardWillHide:(NSNotification *)notification { [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:0.3]; CGRect frame = self.keyboardToolbar.frame; frame.origin.y = self.view.frame.size.height; self.keyboardToolbar.frame = frame; [UIView commitAnimations]; } 

बस इस समस्या को एक अलग तरीके से हल किया

  • एक बटन बनाएं जो कि पृष्ठभूमि में रखा जाएगा
  • एट्रिब्यूट इंस्पेक्टर से, बटन प्रकार को कस्टम में बदलें, और बटन को पारदर्शी बनाता है
  • संपूर्ण दृश्य को कवर करने के लिए बटन का विस्तार करें और सुनिश्चित करें कि बटन अन्य सभी ऑब्जेक्ट के पीछे है। ऐसा करने का आसान तरीका है दृश्य में सूची दृश्य के शीर्ष पर बटन खींचें
  • नियंत्रण को viewController.h फ़ाइल में बटन खींचें और एक एक्शन बनाएं (प्रेषित इवेंट: टच अप इनसाइड) जैसे:

     (IBAction)ExitKeyboard:(id)sender; 
  • ViewController.m दिखना चाहिए:

     (IBAction)ExitKeyboard:(id)sender { [self.view endEditing:TRUE]; } 
  • एप्लिकेशन चलाएं, और जब आप टेक्स्टव्यू से दूर क्लिक करते हैं, तो कीबोर्ड गायब हो जाता है

एक पर्यवेक्षक को देखेंडिडलोड में जोड़ें

 [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(textViewKeyPressed:) name: UITextViewTextDidChangeNotification object: nil]; 

और फिर "\ n" के लिए जांच करने के लिए चयनकर्ता का उपयोग करें

 -(void) textViewKeyPressed: (NSNotification*) notification { if ([[[notification object] text] hasSuffix:@"\n"]) { [[notification object] resignFirstResponder]; } } 

यह "\ n" का उपयोग करता है और रिटर्न कुंजी की विशेष रूप से जांच नहीं करता है, लेकिन मुझे लगता है कि यह ठीक है।

अद्यतन करें

नीचे रिब्टो का जवाब देखें जो \n स्थान पर [NSCharacterSet newlineCharacterSet] का उपयोग करता है

इस धागे में उपलब्ध सबसे पूर्ण और साफ उत्तर होने के लिए मुझे जॉज़बामा का उत्तर मिला।

इसके लिए स्विफ्ट 3 सिंटैक्स नीचे दिया गया है:

 func textView(_ textView: UITextView, shouldChangeTextIn _: NSRange, replacementText text: String) -> Bool { let resultRange = text.rangeOfCharacter(from: CharacterSet.newlines, options: .backwards) if text.characters.count == 1 && resultRange != nil { textView.resignFirstResponder() // Do any additional stuff here return false } return true } 

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

  - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{ if ([text isEqualToString:@"\n"]) { [self.view endEditing:YES]; } return YES; } 

// आप इसका उपयोग कर सकते हैं …

चरण 1. पहला चरण यह सुनिश्चित करना है कि आप UITextViewDelegate प्रोटोकॉल के लिए समर्थन की घोषणा करें। यह आपकी हेडर फाइल में किया जाता है, जैसा कि उदाहरण यहां हैडर है

EditorController.h:

 @interface EditorController : UIViewController { UITextView *messageTextView; } @property (nonatomic, retain) UITextView *messageTextView; @end 

चरण 2. आगे, आपको नियंत्रक को यूआईटीक्स्टव्यू के प्रतिनिधि के रूप में पंजीकृत करना होगा। उपर्युक्त उदाहरण से जारी रखने के लिए, यहां बताया गया है कि कैसे मैं EditorController साथ UITextView को प्रतिनिधि के रूप में आरंभ कर रहा हूं …

 - (id) init { if (self = [super init]) { // define the area and location for the UITextView CGRect tfFrame = CGRectMake(10, 10, 300, 100); messageTextView = [[UITextView alloc] initWithFrame:tfFrame]; // make sure that it is editable messageTextView.editable = YES; // add the controller as the delegate messageTextView.delegate = self; } 

चरण 3. और अब पहेली का अंतिम टुकड़ा है चाहिए shouldCahngeTextInRange संदेश के जवाब में कार्रवाई करने के लिए निम्नानुसार है:

 - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { // Any new character added is passed in as the "text" parameter if ([text isEqualToString:@"\n"]) { // Be sure to test for equality using the "isEqualToString" message [textView resignFirstResponder]; // Return FALSE so that the final '\n' character doesn't get added return FALSE; } // For any other character return TRUE so that the text gets added to the view return TRUE; } 

तीव्र

 func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool { if text == "\n" { textView.resignFirstResponder() } return true } 

और कॉन्फ़िगर करें

स्विफ्ट कोड

अपने वर्ग में UITextViewDelegate को लागू करें / इस तरह देखें:

 class MyClass: UITextViewDelegate { ... 

textView प्रतिनिधि स्वयं को सेट करें

 myTextView.delegate = self 

और फिर निम्नलिखित को लागू करें:

  func textViewDidChange(_ textView: UITextView) { if textView.text.characters.count >= 1 { if let lastChar = textView.text.characters.last { if(lastChar == "\n"){ textView.text = textView.text.substring(to: textView.text.index(before: textView.text.endIndex)) textView.resignFirstResponder() } } } } 

संपादित करें मैंने कोड को अद्यतन किया क्योंकि यह एक अच्छा विचार नहीं है कि किसी पाठ क्षेत्र में एक उपयोगकर्ता के इनपुट को एक कार्यक्षेत्र में बदलने के लिए और राज्य को रीसेट करने के बाद ही हैक कोड पूरा होने के बाद।

दृश्य स्क्रीन में स्पर्श करते समय आप कीबोर्ड भी छुपा सकते हैं:

 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { UITouch * touch = [touches anyObject]; if(touch.phase == UITouchPhaseBegan) { [txtDetail resignFirstResponder]; } } 

स्विफ्ट का उत्तर:

 override func viewDidLoad() { super.viewDidLoad() let tapGestureReconizer = UITapGestureRecognizer(target: self, action: "tap:") view.addGestureRecognizer(tapGestureReconizer) } func tap(sender: UITapGestureRecognizer) { view.endEditing(true) } 

मैंने इस कोड को प्रत्युत्तर बदलने के लिए उपयोग किया था

  - (BOOL)textView:(UITextView*) textView shouldChangeTextInRange: (NSRange) range replacementText: (NSString*) text { if ([text isEqualToString:@"\n"]) { //[textView resignFirstResponder]; //return YES; NSInteger nextTag = textView.tag + 1; // Try to find next responder UIResponder* nextResponder = [self.view viewWithTag:nextTag]; if (nextResponder) { // Found next responder, so set it. [nextResponder becomeFirstResponder]; } else { // Not found, so remove keyboard. [textView resignFirstResponder]; } return NO; return NO; } return YES; } 

ठीक। हर किसी ने चाल के साथ उत्तर दिया है लेकिन मुझे लगता है कि यह हासिल करने का सही तरीका है

Interface Builder में " एंड एंड ऑन एक्स्प्ले " इवेंट में निम्नलिखित एक्शन को कनेक्ट करना। (निम्न विधि से 'एक्सट पर एंडेड' पर से ' TextField और cntrl-drag' पर राइट-क्लिक करें।

 -(IBAction)hideTheKeyboard:(id)sender { [self.view endEditing:TRUE]; } 
 -(BOOL)textFieldShouldReturn:(UITextField *)textField; // called from textfield (keyboard) -(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text; // good tester function - thanks 
 - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { if (range.length==0) { if ([text isEqualToString:@"\n"]) { [txtView resignFirstResponder]; if(textView.returnKeyType== UIReturnKeyGo){ [self PreviewLatter]; return NO; } return NO; } } return YES; } 
 + (void)addDoneButtonToControl:(id)txtFieldOrTextView { if([txtFieldOrTextView isKindOfClass:[UITextField class]]) { txtFieldOrTextView = (UITextField *)txtFieldOrTextView; } else if([txtFieldOrTextView isKindOfClass:[UITextView class]]) { txtFieldOrTextView = (UITextView *)txtFieldOrTextView; } UIToolbar* numberToolbar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, [Global returnDeviceWidth], 50)]; numberToolbar.barStyle = UIBarStyleDefault; UIBarButtonItem *btnDone = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"btn_return"] style:UIBarButtonItemStyleBordered target:txtFieldOrTextView action:@selector(resignFirstResponder)]; numberToolbar.items = [NSArray arrayWithObjects:btnDone,nil]; [numberToolbar sizeToFit]; if([txtFieldOrTextView isKindOfClass:[UITextField class]]) { ((UITextField *)txtFieldOrTextView).inputAccessoryView = numberToolbar; } else if([txtFieldOrTextView isKindOfClass:[UITextView class]]) { ((UITextView *)txtFieldOrTextView).inputAccessoryView = numberToolbar; } } 

सवाल यह पूछता है कि इसे वापसी कुंजी के साथ कैसे करना है, लेकिन मुझे लगता है कि यह किसी व्यक्ति को यूआईटीक्स्टव्यू का इस्तेमाल करते समय केवल कीबोर्ड को गायब करने के इरादे से मदद कर सकता है:

 @IBOutlet weak var textView: UITextView! private func addToolBarForTextView() { let textViewToolbar: UIToolbar = UIToolbar() textViewToolbar = UIBarStyle.Default textViewToolbar = [ UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.Done, target: self, action: #selector(self.cancelInput)), UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: self, action: nil), UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Done, target: self, action: #selector(self.doneInput)) ] textViewToolbar() self.textView.inputAccessoryView = textViewToolbar //do it for every relevant textView if there are more than one } func doneInput() { self.textView.resignFirstResponder() } func cancelInput() { self.textView.text = "" self.textView.resignFirstResponder() } 

ViewDidLoad या कुछ अन्य जीवन चक्र विधि में addToolBarForTextView () को कॉल करें।

ऐसा लगता है कि मेरे लिए सही समाधान था

चीयर्स,

मूरत

मुझे पता है कि यह इस प्रश्न का सटीक उत्तर नहीं है, लेकिन मुझे जवाब देने के लिए इंटरनेट को शिकार करने के बाद यह धागा मिला। मुझे लगता है कि दूसरों को लगता है कि भावना साझा

यह मेरा UITapGestureRecognizer का विचरण है जो मुझे विश्वसनीय और उपयोग में आसान लगता है – बस ViewViewController को TextView के प्रतिनिधि सेट करें।

ViewDidLoad के बजाय मैं UITapGestureRecognizer को जोड़ने के लिए जब TextView संपादन के लिए सक्रिय हो जाता है:

 -(void)textViewDidBeginEditing:(UITextView *)textView{ _tapRec = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tap:)]; [self.view addGestureRecognizer: _tapRec]; NSLog(@"TextView Did begin"); } 

जब मैं TextView के बाहर टैप करता हूं, तो व्यू संपादन मोड को समाप्त होता है और यूआईटैपजस्टचररेक्ननाइज़र खुद को हटा देता है इसलिए मैं दृश्य में अन्य नियंत्रणों के साथ इंटरैक्ट करना जारी रख सकता हूं।

 -(void)tap:(UITapGestureRecognizer *)tapRec{ [[self view] endEditing: YES]; [self.view removeGestureRecognizer:tapRec]; NSLog(@"Tap recognized, tapRec getting removed"); } 

आशा है कि ये आपकी मदद करेगा। यह इतना स्पष्ट लगता है, लेकिन मैंने इस समाधान को कभी भी वेब पर कभी नहीं देखा है – क्या मैं कुछ गलत कर रहा हूं?

पाठ के लिए प्रतिनिधि सेट करने के लिए मत भूलना – अन्यथा resignfirstresponder काम नहीं करेगा

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

 NSInteger lengthOfText = [[textView.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length]; 

Xcode 6.4 के लिए।, स्विफ्ट 1.2। :

  override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { super.touchesBegan(touches, withEvent: event) if let touch = touches.first as? UITouch { self.meaningTextview.resignFirstResponder() } } 

इसके लिए मेरा हैक:

1- पूरे दृश्य को कवर करने वाला एक बटन बनाएं; 2- इसे अपने विचार की पृष्ठभूमि में भेजें, 3- परिवर्तन गुणक में "कस्टम" से टाइप करें "गोल रिट" से टाइप करें, 4- एक क्रिया बनाएं 5- क्रिया विधि को कार्यान्वित करें:

 - (IBAction)bgTouched:(id)sender { //to dismiss keyboard on bg btn pressed [_userInput resignFirstResponder]; } 

जहां _userInput आपका TextField आउटलेट है