UITextField को संपादित करते समय आप कीबोर्ड को कैसे खारिज करते हैं


181

मुझे पता है कि मुझे अपने यूआईटैक्सफ़िल्ड को पहले उत्तरदाता को इस्तीफा देने के लिए कहना होगा जब मैं कीबोर्ड को नष्ट करना चाहता हूं, लेकिन मुझे यकीन नहीं है कि कैसे पता चलेगा कि उपयोगकर्ता ने कीबोर्ड पर "डन" कुंजी दबाया है। क्या कोई सूचना है जिसे मैं देख सकता हूं?


2
[self.view एंड एडिटिंग: हाँ]; में छूना शुरू हुआ प्रतिनिधि सबसे अच्छा समाधान है
ज़ार ई अहमर

जवाबों:


351

मैंने UITextFieldअपनी ViewControllerकक्षा के प्रतिनिधि को सेट किया ।

उस कक्षा में मैंने इस विधि को इस प्रकार लागू किया:

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

ऊपर दिए गए उदाहरण देखें ... वायर जो कि इंटेफेसफेस का उपयोग करके आपके द्वारा अपने नियंत्रक के रूप में जो भी उपयोग कर रहे हैं उस पर कार्रवाई करें ... जब भी उपयोगकर्ता पाठ प्रविष्टि प्रणाली (दबाए गए कार्य) को खारिज कर देता है, तो इसे लागू किया जाएगा ...
जेसन कोको

2
इनमें से कोई भी काम करेगा - पाठ फ़ील्ड अपनी कार्रवाई तब भेजता है जब उपयोगकर्ता रिटर्न ("पूर्ण", जो भी) कुंजी हिट करता है, और अपने प्रतिनिधि -textFieldShouldReturn भी भेजता है:।
नूह विदरस्पून

BTW - यह एक UISearchBar के लिए भी काम करता है। उदाहरण के लिए, मेरे कोड में एक सदस्य IBOutlet searchBarTusb था; जब मेरी 'वापसी कुंजी' (UIReturnKeySearch) पर क्लिक किया गया, - (शून्य) searchBarSearchButtonClicked :, मैंने स्टेटमेंट डाला [searchBarTusb resignFirstResponder]; ध्यान दें, इंटरफ़ेस बिल्डर का उपयोग करके एनआईबी में 'वापसी कुंजी' सेट की गई थी।
मोबिबोब

क्यों बदले NOबदले YES?
इयूलियन ओनोफ्रेई

@IulianOnofrei रिटर्न बटन का डिफ़ॉल्ट व्यवहार एक लाइन रिटर्न जोड़ना और कीबोर्ड ऑनस्क्रीन रखना है। लौटकर NOआप पाठ में एक पंक्ति वापस जोड़ने से बचते हैं।
कुबी

47

यदि आप इंटरफ़ेस फ़ील्ड में किसी कार्य (IBAction) के लिए टेक्स्ट फ़ील्ड के DidEndOnExit इवेंट को कनेक्ट करते हैं, तो उपयोगकर्ता द्वारा कीबोर्ड (वापसी कुंजी के साथ) को खारिज करने और प्रेषक UITextField का संदर्भ होगा जिसने इवेंट को निकाल दिया।

उदाहरण के लिए:

-(IBAction)userDoneEnteringText:(id)sender
{
    UITextField theField = (UITextField*)sender;
    // do whatever you want with this text field
}

उसके बाद, InterfaceBuilder में, अपने नियंत्रक (या जो भी आप UI से घटनाओं को लिंक करने के लिए उपयोग कर रहे हैं) पर इस क्रिया के लिए टेक्स्ट फ़ील्ड के DidEndOnExit इवेंट को लिंक करें। जब भी उपयोगकर्ता पाठ में प्रवेश करता है और पाठ क्षेत्र को खारिज करता है, तो नियंत्रक को यह संदेश भेजा जाएगा।


केवल एक घटना है कि ऐसा लगता है कि यह काम कर सकता है textFieldDidEndEditing, जिसमें कहा गया है कि यह केवल यूआईटेक्फ़िल्ड द्वारा भेजे जाने के बाद पहले प्रत्युत्तर स्थिति से इस्तीफा दे दिया गया है। मुझे कैसे पता चलेगा कि मुझे पहले उत्तरदाता के पद से इस्तीफा देने की आवश्यकता है?
4

मैं शब्दावली के बारे में माफी चाहता हूँ ... यह एक वास्तविक अधिसूचना (घटना) नहीं है ... मैं एक त्वरित उदाहरण और स्पष्टीकरण के साथ अपने उत्तर को संपादित करने जा रहा हूं, इसलिए देखें कि :)
जेसन कोको

1
इस उत्तर को स्पष्ट करने के लिए, जब आप रिटर्न कुंजी दबाते हैं, तो TextField "डिड एंड ऑन एक्जिट" ईवेंट भेजता है, ताकि आपको अपने कंट्रोलर से लिंक करने की आवश्यकता हो। मुझे लगता है कि ऊपर बताए गए तरीके से यह विधि आसान है।
कुबी

2
क्या आप इस उत्तर को संपादित कर सकते हैं ताकि यह तार करने की घटना का उल्लेख करें, कृपया? यह स्पष्ट रूप से प्रतिनिधि को स्थापित करने की तुलना में अच्छा है।
दान रोसेनस्टार्क

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

32

आप अपने कंट्रोलर में एक विधि भी बना सकते हैं

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

और फिर IB में कनेक्शन इंस्पेक्टर में इवेंट "डिड एंड ऑन एक्जिट" को कनेक्ट करें।


1
यह लगभग गलत है, या कम से कम यह बात याद आती है। DidEndOnExitघटना की सदस्यता लेने से , आपको कॉल करने की आवश्यकता नहीं है resignFirstResponder। आप एक प्रतीकात्मक ब्रेकपॉइंट लगाकर इसका परीक्षण कर सकते हैं [UIResponder resignFirstResponder]। ध्यान दें कि भले ही आप resignFirstResponder को कॉल न करें, फिर भी यह सिस्टम द्वारा कॉल किया जाता है। यह मैट नेबुर्ग की उत्कृष्ट पुस्तक (s): apeth.com/iOSBook/…
क्रिस

19

कुबी, धन्यवाद। आपका कोड काम कर गया। जैसा कि आप कहते हैं कि आपको स्पष्ट होना चाहिएUITextField की delegateViewController जिसमें पाठ क्षेत्र बसता था के बराबर होना चाहिए। आप जहां चाहें वहां ऐसा कर सकते हैं। मैंने viewDidLoadतरीका चुना ।

- (void)viewDidLoad 
{
    // sets the textField delegates to equal this viewController ... this allows for the keyboard to disappear after pressing done
    daTextField.delegate = self;
}

यदि आपने अपने स्टोरीबोर्ड या NIB में टेक्स्ट फ़ील्ड जोड़ा है, तो आप टेक्स्ट फ़ील्ड को भी सेट कर सकते delegateहैं। जैसा कि ऊपर दिखाया गया है, आपको यह प्रोग्रामेटिक रूप से करने की आवश्यकता नहीं है। या तो दृष्टिकोण ठीक काम करता है।
रोब

18

यहां बिना किसी कोड के स्वचालित कीबोर्ड बर्खास्तगी व्यवहार के लिए एक चाल है। Nib में, पहले निरीक्षक प्रॉक्सी ऑब्जेक्ट को आइडेंटिटी इंस्पेक्टर में एडिट करें, एक नया फर्स्ट रिस्पोंडर एक्शन जोड़ें; चलो इसे बुलाओ dummy:। अब टेक्स्ट फ़ील्ड के एक्जिट इवेंट पर डिड एंड को dummy:पहले रिस्पोंडर प्रॉक्सी ऑब्जेक्ट की कार्रवाई के लिए हुक करें । बस! चूंकि टेक्स्ट फ़ील्ड के डिड एंड ऑन एक्जिट इवेंट में अब एक एक्शन-टारगेट जोड़ी है, उपयोगकर्ता द्वारा रिटर्न को टैप करने पर टेक्स्ट फ़ील्ड स्वचालित रूप से अपने कीबोर्ड को खारिज कर देता है; और जब से उत्तरदाता श्रृंखला में भेजे गए संदेश के लिए हैंडलर नहीं ढूंढने के लिए कोई जुर्माना नहीं है, तब भी dummy:कहीं भी लागू नहीं होने पर भी ऐप क्रैश नहीं होता है ।


@matt ने पाया कि यदि मैं एक लेग सेग जोड़ता हूं और didEndOnExit ईवेंट को कनेक्ट करता हूं, तो रिटर्न को दबाने पर इस् लेदर लीग को ट्रिगर किया जाएगा। घटना कनेक्शन के बिना सेग को ट्रिगर नहीं किया जाता है। महान लेकिन हुह? कोई टिप्पणी? BTW: मेरे पास आपकी स्विफ्ट (समाप्त) और iOS10 (चैप 6 पर) किताबें हैं। उन्होंने मेरी जबरदस्त मदद की है!
वर्टिकॉन

@Verticon के सवाल और जवाब का सेगमेंट से कोई लेना-देना नहीं है, इसलिए मुझे इस मुद्दे की समझ नहीं है ... :( यह विशुद्ध रूप से कीबोर्ड को खारिज करने के लिए है
मैट

@ मट सॉरी, यार। मैं पिगी बैकिंग कर रहा था क्योंकि 1) मैं इस धागे पर आया था जब मैं यूआईटेक्फ़िल्ड की वापसी कुंजी को संभालने के लिए काम कर रहा था; और 2) यह आपके साथ बातचीत करने का मौका था (दा पुस्तकों के लिए thx)। कोई "मुद्दा" नहीं है। बस मेरे हिस्से के बारे में समझ की कमी क्यों / कैसे काम करती है इसके बारे में।
वर्टिकॉन १३'१ '

@Verticon मैं मदद नहीं कर पाने के लिए माफी चाहता हूं। अधिक जानकारी (डेमो प्रोजेक्ट?) के साथ एक नया प्रश्न तैयार करने के लिए स्वतंत्र महसूस करें और अगर मैं उपयोगी हो सकता है तो मुझे ब्लिप करें।
मैट


11

बस जोड़ दो

[textField endEditing:YES];

जहाँ आप कीबोर्ड को अक्षम करना चाहते हैं और पिकर दृश्य प्रदर्शित करना चाहते हैं।


10

स्विफ्ट में आप नियंत्रक में एक IBAction लिख सकते हैं और उस कार्य के लिए टेक्स्ट फ़ील्ड की दी गई समाप्ति घटना से बाहर कर सकते हैं

@IBAction func returnPressed(sender: UITextField) {
    self.view.endEditing(true)
}

5

Swift 4.2 और यह 100% काम करेगा

import UIKit

class ViewController: UIViewController, UITextFieldDelegate {

    @IBOutlet weak var textField: UITextField!


    override func viewDidLoad() {
        super.viewDidLoad()

        self.textField.delegate = self

    }

    // hide key board when the user touches outside keyboard

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

    // user presses return key

    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        return true
    }

}

4

आप भी उपयोग कर सकते हैं

 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
  {

   [self.yourTextField resignFirstResponder];

  }

यदि आपके पास कई Uitextfields हैं तो सबसे अच्छा:

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

2

यहां मुझे काम करने के लिए क्या करना है, और मुझे लगता है कि कीबोर्ड के लिए किसी नंबर पैड के साथ (या किसी अन्य बटन के बिना किसी अन्य व्यक्ति के लिए आवश्यक है):

  1. मैंने ViewController में UIView को एक UIControl में बदल दिया।
  2. मैंने एक फंक्शन बनाया जिसका नाम है

    -(IBAction)backgroundIsTapped:(id)sender

यह भी .h फ़ाइल में परिभाषित किया गया था।

इसके बाद, मैंने इंटरफ़ेस बिल्डर में ViewController के लिए 'टच डाउन' बिट से जोड़ा।

'टैप्ड बैकग्राउंड' फंक्शन में, मैंने इसे डाला:

    [answerField resignFirstResponder];

बस UITextField के नाम में 'answerField' को बदलना याद रखें, जिससे आप कीबोर्ड को हटाना चाहते हैं (स्पष्ट रूप से सुनिश्चित करें कि आपका UITextField नीचे की तरह परिभाषित है :)

    IBOutlet UITextField * <nameoftextfieldhere>;

मुझे पता है कि यह विषय शायद बहुत पहले मर गया ... लेकिन मुझे उम्मीद है कि इससे किसी को, कहीं मदद मिलेगी!


..लेकिन अगर यूजर दूसरे कंट्रोल को टैप करता है तो यह इतनी अच्छी तरह से काम नहीं करता।
रागनारिस

2

आप देखेंगे कि "textFieldShouldReturn" विधि पाठ क्षेत्र की वस्तु प्रदान करती है जिसने Done कुंजी को हिट किया है। यदि आप TAG सेट करते हैं तो आप उस टेक्स्ट फ़ील्ड पर स्विच कर सकते हैं। या आप इसके निर्माता द्वारा संग्रहीत कुछ सदस्य मूल्य के साथ ऑब्जेक्ट के पॉइंटर को ट्रैक और तुलना कर सकते हैं।

मेरा दृष्टिकोण एक आत्म-अध्ययन के लिए इस तरह है:

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    NSLog(@"%s", __FUNCTION__);

    bool fDidResign = [textField resignFirstResponder];

    NSLog(@"%s: did %resign the keyboard", __FUNCTION__, fDidResign ? @"" : @"not ");

    return fDidResign;
}

इस बीच, मैंने "सत्यापन" परीक्षण रखा, जो इस्तीफे से इनकार करता है। यह केवल चित्रण के लिए है, इसलिए यदि उपयोगकर्ता कोई प्रकार नहीं! क्षेत्र में, यह खारिज नहीं करेगा। व्यवहार वैसा ही था जैसा मैं चाहता था, लेकिन उत्पादन का क्रम वैसा नहीं था जैसा मुझे उम्मीद थी।

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {
    NSLog(@"%s", __FUNCTION__);

    if( [[textField text] isEqualToString:@"NO!"] ) {
        NSLog(@"%@", textField.text);
        return NO;
    } else {
        return YES;
    }
}

स्वीकृति के बाद इस इनकार के लिए मेरा NSLog आउटपुट है। आप देखेंगे कि मैं इस्तीफे का परिणाम वापस कर रहा हूं, लेकिन मुझे उम्मीद थी कि कॉल करने के लिए वापस रिपोर्ट करने के लिए मेरे पास FALSE लौटने के लिए ?! उसके अलावा, यह आवश्यक व्यवहार है।

13.313 स्टडीकेबड [109: 207] - [स्टडीकेबडव्यूकंट्रोलर टेक्स्टफिल्डशोल्डरऑर्न:]
13.320 स्टडीकेबड [109: 207] - [स्टडीकेबडव्यूकंट्रोलर टेक्स्टफिल्डशोल्डएंडराइटिंग:]
13.327 स्टडीकेबड [109: 207] नहीं!
13.333 StudyKbd [109: 207] - [StudyKbdViewController textFieldShouldReturn:]: ने कीबोर्ड को इस्तीफा दिया
59.891 StudyKbd [109: 207] - [StudyKbdViewController textFieldShouldRodurn:]]
59.897 StudyKbd [109: 207] - [StudyKbdViewController textFieldShouldEndEditing:]
59.917 स्टडीकेबड [109: 207] - [स्टडीकेबडव्यूकंट्रोलर कियाएडिटेक्स]: नहीं।
59.928 StudyKbd [109: 207] - [StudyKbdViewController textFieldShouldReturn:]: ने कीबोर्ड को इस्तीफा दिया

1
क्या आप समझा सकते हैं .. अगर मैं NO या YES दोनों ही मामलों में वापस कर देता हूं तो वही चीजें होती हैं जो textFieldShouldReturn प्रतिनिधि विधि में हां लौटने की जरूरत है
। जायसवाल

1

यहां रिटर्न की या एडिशन के बैकग्राउंड में टच के साथ एडिशन खत्म करने का काफी साफ तरीका है।

इंटरफ़ेस बिल्डर में, अपने फ़ील्ड को UIFormView के दृश्य में एम्बेड करें

यह वर्ग क्या करता है:

  • फ़ील्ड डेलिगेट के रूप में स्वयं को संलग्न करें (या तो नीब से जागा, या मैन्युअल रूप से जोड़ा गया)
  • वर्तमान संपादित फ़ील्ड पर एक संदर्भ रखें
  • वापसी पर कीबोर्ड को खारिज करें या पृष्ठभूमि में स्पर्श करें

यहाँ कोड है:

इंटरफेस

#import <UIKit/UIKit.h>

@interface UIFormView : UIView<UITextFieldDelegate>

-(BOOL)textFieldValueIsValid:(UITextField*)textField;
-(void)endEdit;

@end

कार्यान्वयन

#import "UIFormView.h"

@implementation UIFormView
{
    UITextField* currentEditingTextField;
}

// Automatically register fields

-(void)addSubview:(UIView *)view
{
    [super addSubview:view];
    if ([view isKindOfClass:[UITextField class]]) {
        if ( ![(UITextField*)view delegate] ) [(UITextField*)view setDelegate:self];
    }
}

// UITextField Protocol

-(void)textFieldDidBeginEditing:(UITextField *)textField
{
    currentEditingTextField = textField;
}

-(void)textFieldDidEndEditing:(UITextField *)textField
{
    currentEditingTextField = NULL;
}

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    [self endEdit];
}

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    if ([self textFieldValueIsValid:textField]) {
        [self endEdit];
        return YES;
    } else {
        return NO;
    }
}

// Own functions

-(void)endEdit
{
    if (currentEditingTextField) {
        [currentEditingTextField endEditing:YES];
        currentEditingTextField = NULL;
    }
}


// Override this in your subclass to handle eventual values that may prevent validation.

-(BOOL)textFieldValueIsValid:(UITextField*)textField
{
    return YES;
}

@end
  • प्रपत्र को उप-वर्ग करके और textFieldValueIsValid:विधि को ओवरराइड करके , आप दिए गए फ़ील्ड के लिए मान सही नहीं होने पर संस्करण के अंत से बच सकते हैं।

  • यदि किसी फ़ील्ड में इंटरफ़ेस बिल्डर में एक प्रतिनिधि सेट है, तो फ़ॉर्म इसे नहीं बदलता है। मैं एक विशेष क्षेत्र में एक अलग प्रतिनिधि को सेट करने के कई कारण नहीं देखता, लेकिन क्यों नहीं ...

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

मैं व्यक्तिगत रूप से इसे अपने ढांचे में रखता हूं, और हमेशा इसे सुविधाओं को जोड़ने के लिए उप-वर्ग करता हूं, यह अक्सर "जैसा है" उपयोगी है।

मुझे उम्मीद है कि यह मदद करेगा। सभी को खुश करते हैं


1
सहायक वर्ग। एक छोटा बिंदु, आपको "UI" के साथ अपनी खुद की कक्षाओं को उपसर्ग नहीं करना चाहिए। उद्देश्य-ग में आपको स्विफ्ट में अपने स्वयं के उपसर्ग ("टीएल"?) का उपयोग करना चाहिए, कुछ भी उपयोग न करें।
कुब्बी

धन्यवाद @kubi ये सही है। यह MooseFactory की तरह मेरी रूपरेखा में MF है;)
Moose

1

यदि आप एक UIViewController के सभी संपादन चाहते हैं तो आप उपयोग कर सकते हैं।

[[self view]endEditing:YES];

और यदि आप एक विशेष UITextField कीबोर्ड छिपाने को खारिज करना चाहते हैं तो उपयोग करें।

अपने दृश्य में 1.add प्रतिनिधि को नियंत्रित करें

<UITextFieldDelegate>
  1. प्रतिनिधिमंडल को अपने पाठ्यक्षेत्र में असमर्थ बनाएं।

    self.yourTextField.delegate = self;

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

    - (BOOL) textFieldShouldEndEditing: (UITextField *) textField {[textField resignFirstResponder]; हाँ लौटें;}


1

प्रोग्राम 3 के UITextField के प्रतिनिधि को स्विफ्ट 3 में सेट करें

UITextFieldDelegate को अपने ViewController.Swift फ़ाइल में लागू करें (जैसे वर्ग ViewController: UIViewController, UITextFieldDelegate {)

 lazy var firstNameTF: UITextField = {

    let firstname = UITextField()
    firstname.placeholder = "FirstName"
    firstname.frame = CGRect(x:38, y: 100, width: 244, height: 30)
    firstname.textAlignment = .center
    firstname.borderStyle = UITextBorderStyle.roundedRect
    firstname.keyboardType = UIKeyboardType.default
    firstname.delegate = self
    return firstname
}()

lazy var lastNameTF: UITextField = {

    let lastname = UITextField()
    lastname.placeholder = "LastName"
    lastname.frame = CGRect(x:38, y: 150, width: 244, height: 30)
    lastname.textAlignment = .center
    lastname.borderStyle = UITextBorderStyle.roundedRect
    lastname.keyboardType = UIKeyboardType.default
    lastname.delegate = self
    return lastname
}()

lazy var emailIdTF: UITextField = {

    let emailid = UITextField()
    emailid.placeholder = "EmailId"
    emailid.frame = CGRect(x:38, y: 200, width: 244, height: 30)
    emailid.textAlignment = .center
    emailid.borderStyle = UITextBorderStyle.roundedRect
    emailid.keyboardType = UIKeyboardType.default
    emailid.delegate = self
    return emailid
}()

// मार्क: - डेलीगेट टेक्स्ट हैंडल संभालना ।।

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

func textFieldShouldReturn(_ textField: UITextField) -> Bool {

    if textField == firstNameTF {

        lastNameTF.becomeFirstResponder()
    }

    else if textField == lastNameTF {

        emailIdTF.becomeFirstResponder()
    }
    else {
        view.emailIdTF(true)
    }
    return true
}

0

एक फ़ंक्शन हाइडबोर्ड बनाएँ और इसे .xib फ़ाइल में टेक्स्टफ़ील्ड से लिंक करें और DidEndOnExit चुनें

-(IBAction)Hidekeyboard    
{    
      textfield_name.resignFirstResponder;    
}  

0

यदि आपने इंटरफ़ेस बिल्डर का उपयोग करके दृश्य बनाया है, तो निम्न का उपयोग करें बस एक विधि बनाएं,

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

बस दृश्य में टेक्स्ट फ़ील्ड पर राइट क्लिक करें, और ईवेंट को डिड एंड ऑन एग्जिट के रूप में सेट करें, और इसे "बर्खास्तगीबोर्ड" विधि पर वायर करें।

शुरुआती के लिए सबसे अच्छा मार्गदर्शक "हेड फर्स्ट आईफ़ोन और आईपैड डेवलपमेंट, दूसरा संस्करण" है


0

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

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

0
//====================================================
//                  textFieldShouldReturn:
//====================================================
-(BOOL) textFieldShouldReturn:(UITextField*) textField { 
    [textField resignFirstResponder];
    if(textField.returnKeyType != UIReturnKeyDone){
        [[textField.superview viewWithTag: self.nextTextField] becomeFirstResponder];
    }
    return YES;
}

0

किसी को भी स्विफ्ट 3 की तलाश है

1) अपने UITextField के प्रतिनिधि को सुनिश्चित करें स्टोरीबोर्ड में आपके ViewController के लिए वायर्ड है

2) UITextFieldDelegate लागू करें अपने ViewController.Swift फ़ाइल में करें (जैसे वर्ग ViewController: UIViewController, UITextFieldDelegate {)

3) नीचे प्रतिनिधि विधि का उपयोग करें

func textFieldShouldReturn(textField: UITextField) -> Bool { 
   textField.resignFirstResponder()  
return false }

0

इस तरह से मैंने स्विफ्ट 4.2 में कीबोर्ड को खारिज कर दिया और यह मेरे लिए काम करता है:

    override func viewDidLoad() {
    super.viewDidLoad()

    let tap = UITapGestureRecognizer(target: self, action: 
    #selector(dismissKeyboard))

    view.addGestureRecognizer(tap)
    }

    @objc func dismissKeyboard (_ sender: UITapGestureRecognizer) {
    numberField.resignFirstResponder()
    }

-2

स्विफ्ट 3, आईओएस 9+

@IBAction private func noteFieldDidEndOnExit(_ sender: UITextField) {}

UPD: यह अभी भी मेरे लिए ठीक काम करता है। मुझे लगता है कि इस जवाब को समर्पित करने वाले व्यक्ति को यह समझ में नहीं आया कि उसे स्टोरीबोर्ड पर इस कार्रवाई को UITextField में बाँधने की आवश्यकता है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.