स्विफ्ट का उपयोग करके कहीं भी स्पर्श करके आईओएस कीबोर्ड को बंद करें


407

मैं इस सब के लिए देख रहा हूँ, लेकिन मैं इसे खोजने के लिए प्रतीत नहीं कर सकते। मुझे पता है कि कीबोर्ड का उपयोग कैसे करना है, Objective-Cलेकिन मुझे पता नहीं है कि कैसे उपयोग करना है Swift? क्या कोई जानता है?


9
आप इसे ऑब्जेक्टिव-सी में कैसे कर रहे हैं? यह आम तौर पर एक वाक्य विन्यास से दूसरे में रूपांतरण है, और शायद ही कभी विभिन्न तरीकों / सम्मेलनों की बात है।
क्रेग ओटिस

5
मैं स्विफ्ट में नहीं
डूबा

आप इस उत्तर को जांचना चाहते हैं ।
अहमद एफ

जवाबों:


1298
override func viewDidLoad() {
    super.viewDidLoad()

    //Looks for single or multiple taps. 
    let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "dismissKeyboard")

    //Uncomment the line below if you want the tap not not interfere and cancel other interactions.
    //tap.cancelsTouchesInView = false 

    view.addGestureRecognizer(tap)
}

//Calls this function when the tap is recognized.
@objc func dismissKeyboard() {
    //Causes the view (or one of its embedded text fields) to resign the first responder status.
    view.endEditing(true)
}

इस कार्य को करने का एक और तरीका यहां है यदि आप कई में इस कार्यक्षमता का उपयोग करने जा रहे हैं UIViewControllers :

// Put this piece of code anywhere you like
extension UIViewController {
    func hideKeyboardWhenTappedAround() {
        let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(UIViewController.dismissKeyboard))
        tap.cancelsTouchesInView = false            
        view.addGestureRecognizer(tap)
    }

    @objc func dismissKeyboard() {
        view.endEditing(true)
    }
}

अब हर में UIViewController , आपको बस इस फ़ंक्शन को कॉल करना है:

override func viewDidLoad() {
    super.viewDidLoad()
    self.hideKeyboardWhenTappedAround() 
}

यह फ़ंक्शन मेरे रेपो में एक मानक फ़ंक्शन के रूप में शामिल है, जिसमें इस तरह की बहुत सारी उपयोगी स्विफ्ट एक्सटेंशन हैं, इसे देखें : https://github.com/goktugyil/EZSwiftExtensions


19
पहले उत्तर में स्विफ्ट 2 के बाद से, इस पंक्ति को बदल दें-> लेट टैप करें: UITapGestureRecognizer = UITapGestureRecognizer (लक्ष्य: स्वयं, क्रिया: #selector (MyViewController.dorississeyeyboard))
सैम

2
यह एक tableviewcontroller पर tableviewcell के segue टूट जाता है
Utku Dalmaz

11
यह उन सबसे उपयोगी एक्सटेंशनों में से एक है, जो मैंने कभी पूरे किए हैं! धन्यवाद! एकमात्र सावधानी जो मैं बढ़ाता हूं, वह यह है कि इससे हस्तक्षेप हो सकता है didSelectRowAtIndexPath
क्लिफ्टन लैब्रम

47
बस इस प्रश्न की खोज की और उस पद्धति को लागू किया। टेबल व्यू / UICollectionView के "didSelectRow" के साथ वह बात जो मुझे बुलाती नहीं है, सचमुच मुझे पागल कर देती है। समाधान है: बस इसे अपने विस्तार में जोड़ें tap.cancelsTouchesInView = false:। यह कम से कम मेरे लिए हल है। उम्मीद है कि यह किसी की मदद करता है
क्वांटम

10
"मेरे रेपो की जांच करें" नया है "हीर्स माय न्यू मिक्सटेप": पी
जोश

118

नीचे दिए गए स्विफ्ट का उपयोग करके Xcode 6.1 में कीबोर्ड को खारिज करने के तरीके पर आपके प्रश्न का उत्तर:

import UIKit

class ItemViewController: UIViewController, UITextFieldDelegate {

    @IBOutlet var textFieldItemName: UITextField!

    @IBOutlet var textFieldQt: UITextField!

    @IBOutlet var textFieldMoreInfo: UITextField!


    override func viewDidLoad() {
        super.viewDidLoad()

        textFieldItemName.delegate = self
        textFieldQt.delegate = self
        textFieldMoreInfo.delegate = self
    }

                       ...

    /**
     * Called when 'return' key pressed. return NO to ignore.
     */
    func textFieldShouldReturn(textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        return true
    }


   /**
    * Called when the user click on the view (outside the UITextField).
    */
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        self.view.endEditing(true)
    }

}

( इस जानकारी का स्रोत )।


6
कोड का महान टुकड़ा, धन्यवाद! touchesBegan वास्तव में मैं क्या देख रहा था :)
लुकाज़ सेज़रविंस्की

4
यह मेरे लिए काफी काम नहीं था। यदि मैं दृश्य नियंत्रक के दृश्य पर टैप करता हूं तो यह काम करता है। यदि मैं दृश्य में एक नियंत्रण आइटम पर टैप करता हूं, तो कीबोर्ड खारिज नहीं करता है।
1837 पर user3731622

यह सबसे अच्छा जवाब है जो मैंने अब तक इस्तेमाल किया है! इस उत्तर को सही के रूप में चिह्नित किया जाना चाहिए। धन्यवाद दोस्त!
wagng

यह अब तक का सबसे अच्छा समाधान है। छोटे नोट: नए स्विफ्ट में ओवरराइड हस्ताक्षर थोड़ा बदल गया। आपको टच करने से पहले _ जोड़ना होगा:
ओवरड्यूड फंक टचबेजन

1
यह शायद सही के रूप में चिह्नित किया जाना चाहिए। वर्तमान स्वीकृत उत्तर कीबोर्ड को दिखाते समय दृश्य में प्रत्येक बटन को उत्तरदायी नहीं बनाता है।
बार्टेक स्पिट्ज़ा

39

स्विफ्ट 4 काम कर रहा है

नीचे दिया गया एक्सटेंशन बनाएं और hideKeyboardWhenTappedAround()अपने बेस व्यू कंट्रोलर में कॉल करें ।

//
//  UIViewController+Extension.swift
//  Project Name
//
//  Created by ABC on 2/3/18.
//  Copyright © 2018 ABC. All rights reserved.
//

import UIKit

extension UIViewController {
    func hideKeyboardWhenTappedAround() {
        let tapGesture = UITapGestureRecognizer(target: self, 
                         action: #selector(hideKeyboard))
        view.addGestureRecognizer(tapGesture)
    }

    @objc func hideKeyboard() {
        view.endEditing(true)
    }
}

अपने बेस व्यू कंट्रोलर में कॉल करने के लिए सबसे महत्वपूर्ण बात यह है कि सभी व्यू कंट्रोलर्स में हर समय कॉल करने की आवश्यकता नहीं है।


36

आप कॅाल कर सकते हैं

resignFirstResponder()

UIResponder के किसी भी उदाहरण पर, जैसे कि UITextField। यदि आप इसे उस दृश्य पर कहते हैं जो वर्तमान में कीबोर्ड को प्रदर्शित कर रहा है तो कीबोर्ड खारिज कर देगा।


5
ऐसी स्थिति में जहाँ आप पहले उत्तरदाता को नहीं जानते हैं, resignFirstResponder () परेशानी का एक ढेर हो सकता है। नीचे Esq का उत्तर (view.doneEditing () का उपयोग करके) एक बहुत अधिक उपयुक्त है
शसनर

1
जब भी मैं अपने टेक्स्ट पर ResignFirstResponder का उपयोग करता हूं, एप्लिकेशन क्रैश हो जाता है। मैंने वह सब कुछ करने की कोशिश की जिसके बारे में मैं सोच सकता था, और एक फिक्स के लिए वेब के चारों ओर देखा। कुछ भी मेरी मदद नहीं करता है। क्या आप जानते हैं कि ऐसा क्यों होता है?
AugustoQ

1
जैसा कि शिसर ने कहा कि यह सबसे अच्छा समाधान नहीं है। प्लस यह सभी स्थितियों में काम नहीं करता है।
एलिक्स

21
//Simple exercise to demonstrate, assuming the view controller has a //Textfield, Button and a Label. And that the label should display the //userinputs when button clicked. And if you want the keyboard to disappear //when clicken anywhere on the screen + upon clicking Return key in the //keyboard. Dont forget to add "UITextFieldDelegate" and 
//"self.userInput.delegate = self" as below

import UIKit

class ViewController: UIViewController,UITextFieldDelegate {

    @IBOutlet weak var userInput: UITextField!
    @IBAction func transferBtn(sender: AnyObject) {
                display.text = userInput.text

    }
    @IBOutlet weak var display: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()

//This is important for the textFieldShouldReturn function, conforming to textfieldDelegate and setting it to self
        self.userInput.delegate = self
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

//This is for the keyboard to GO AWAYY !! when user clicks anywhere on the view
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        self.view.endEditing(true)
    }


//This is for the keyboard to GO AWAYY !! when user clicks "Return" key  on the keyboard

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

}

touchesBegan ने मेरे लिए टेक्स्टफील्ड और टेक्स्टव्यू के संपादन को समाप्त करने का काम किया। धन्यवाद
संजू

यह वही है जो मैं उपयोग करता हूं, सरल। समाधान पर ध्यान केंद्रित करने के लिए असंबंधित कोड भी निकालें।
जॉन डो

19

स्विफ्ट 3 के लिए यह बहुत सरल है

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

यदि आप RETURN कुंजी दबाने पर कीबोर्ड छिपाना चाहते हैं

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

लेकिन दूसरे मामले में आपको सभी टेक्स्टफिल्ड्स से भी प्रतिनिधि को पास करना होगा।


मुझे unrecognized selector sent to instanceइस कोड के साथ मिलता है ।
हरिंग 10

11

स्विफ्ट 3: कीबोर्ड को खारिज करने का सबसे आसान तरीका:

  //Dismiss keyboard method
    func keyboardDismiss() {
        textField.resignFirstResponder()
    }

    //ADD Gesture Recignizer to Dismiss keyboard then view tapped
    @IBAction func viewTapped(_ sender: AnyObject) {
        keyboardDismiss()
    }

    //Dismiss keyboard using Return Key (Done) Button
    //Do not forgot to add protocol UITextFieldDelegate 
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        keyboardDismiss()

        return true
    }

1
मुझे पूरा यकीन है कि view.endEditing (सच्चा) कॉल सरल है, इसमें आपको एक चर स्टोर करने या केवल एक पाठ फ़ील्ड मानने की आवश्यकता नहीं है।
ग्लेन होव्स

10

डैश का उत्तर सही और पसंदीदा है। कॉल करने के लिए एक अधिक "झुलसी हुई पृथ्वी" दृष्टिकोण है view.endEditing(true)। यह कारण viewऔर इसके सभी साक्षात्कार हैं resignFirstResponder। यदि आपके पास उस दृश्य का संदर्भ नहीं है जिसे आप खारिज करना चाहते हैं, तो यह एक हैकरी लेकिन प्रभावी समाधान है।

ध्यान दें कि व्यक्तिगत रूप से मुझे लगता है कि आपके पास उस दृश्य का संदर्भ होना चाहिए जिसे आप पहले उत्तरदाता से इस्तीफा देना चाहते हैं। .endEditing(force: Bool)एक बर्बर दृष्टिकोण है; कृपया इसका उपयोग न करें।


10

स्विफ्ट 5 सिर्फ दो लाइन पर्याप्त है। अपने viewDidLoadकाम में जोड़ें ।

 let tapGesture = UITapGestureRecognizer(target: view, action: #selector(UIView.endEditing))
 view.addGestureRecognizer(tapGesture)

यदि आपके नल के इशारे ने कुछ अन्य स्पर्शों को अवरुद्ध कर दिया है, तो इस पंक्ति को जोड़ें:

tapGesture.cancelsTouchesInView = false

बहुत सरल और सुरुचिपूर्ण समाधान :), यहाँ उत्तर होना चाहिए।
जोसेफ अस्त्रहन

9

स्टोरीबोर्ड में:

  1. TableView का चयन करें
  2. दाईं ओर से, विशेषता निरीक्षक का चयन करें
  3. कीबोर्ड सेक्शन में - आप चाहते हैं कि खारिज मोड का चयन करें

वह आइटम नहीं मिल रहा है, यह कहां है और यह कैसा दिखता है? मैं एक पाठ के विशेषता निरीक्षक में हूँ
एथन पार्कर


9

स्विफ्ट 3:

Selectorबर्खास्तगी समारोह में अतिरिक्त सामान करने में सक्षम होने और cancelsTouchesInViewदृश्य के अन्य तत्वों पर स्पर्श के साथ विरूपण को रोकने के लिए पैरामीटर के रूप में विस्तार ।

extension UIViewController {
    func hideKeyboardOnTap(_ selector: Selector) {
        let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: selector)
        tap.cancelsTouchesInView = false
        view.addGestureRecognizer(tap)
    }
}

उपयोग:

override func viewDidLoad() {
    super.viewDidLoad()
    self.hideKeyboardOnTap(#selector(self.dismissKeyboard))
}

func dismissKeyboard() {
    view.endEditing(true)
    // do aditional stuff
}

9

IQKeyboardmanager का उपयोग करें जो आपको आसान हल करने में मदद करेगा .....

/////////////////////////////////////////

[[कीबोर्ड को निष्क्रिय कैसे करें ..] [1]

import UIKit

class ViewController: UIViewController,UITextFieldDelegate {

   @IBOutlet weak var username: UITextField!
   @IBOutlet weak var password: UITextField!

   override func viewDidLoad() {
      super.viewDidLoad() 
      username.delegate = self
      password.delegate = self
      // Do any additional setup after loading the view, typically from a nib.
   }

   override func didReceiveMemoryWarning() {
      super.didReceiveMemoryWarning()
      // Dispose of any resources that can be recreated.
   }

   func textFieldShouldReturn(textField: UITextField!) -> Bool // called when   'return' key pressed. return NO to ignore.
   {
      textField.resignFirstResponder()
      return true;
   }

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

8

मैंने पाया कि सबसे अच्छा समाधान में कुछ समायोजन के साथ @Esqarrouth से स्वीकृत उत्तर शामिल है:

extension UIViewController {
    func hideKeyboardWhenTappedAround() {
        let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "dismissKeyboardView")
        tap.cancelsTouchesInView = false
        view.addGestureRecognizer(tap)
    }

    func dismissKeyboardView() {
        view.endEditing(true)
    }
}

लाइन tap.cancelsTouchesInView = falseमहत्वपूर्ण थी: यह सुनिश्चित करता है किUITapGestureRecognizer उपयोगकर्ता के संपर्क को प्राप्त करने से दृश्य पर अन्य तत्वों को नहीं रोकता है।

विधि dismissKeyboard()को थोड़ा कम सुरुचिपूर्ण में बदल दिया गया था dismissKeyboardView()। ऐसा इसलिए है क्योंकि मेरी परियोजना के काफी पुराने कोडबेस में, कई बार dismissKeyboard()पहले से ही इस्तेमाल किया गया था (मुझे लगता है कि यह असामान्य नहीं है), संकलक मुद्दों का कारण बना।

फिर, ऊपर के रूप में, इस व्यवहार को व्यक्तिगत व्यू कंट्रोलर में सक्षम किया जा सकता है:

override func viewDidLoad() {
    super.viewDidLoad()
    self.hideKeyboardWhenTappedAround() 
}

7

यदि आप स्क्रॉल दृश्य का उपयोग करते हैं, तो यह बहुत सरल हो सकता है।

बस Dismiss interactivelyस्टोरीबोर्ड में चयन करें ।


7

स्विफ्ट 4 में, @objc जोड़ें:

ViewDidLoad में:

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

समारोह:

@objc func dismissKeyboard() {
  view.endEditing(true)
}

7

इस एक्सटेंशन को अपने ViewController में जोड़ें:

  extension UIViewController {
// Ends editing view when touches to view 
  open override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    super.touchesBegan(touches, with: event)
    self.view.endEditing(true)
  }
}

6

एस्कार्रॉउथ के उत्तर पर विस्तार करने के लिए , मैं हमेशा कीबोर्ड को खारिज करने के लिए निम्नलिखित का उपयोग करता हूं, खासकर अगर मैं जिस वर्ग से कीबोर्ड को खारिज कर रहा हूं, उसके पास viewसंपत्ति नहीं है और / या उपवर्ग नहीं हैUIView

UIApplication.shared.keyWindow?.endEditing(true)

और, सुविधा के लिए, UIApplcationवर्ग के लिए निम्न एक्सटेंशन :

extension UIApplication {

    /// Dismisses the keyboard from the key window of the
    /// shared application instance.
    ///
    /// - Parameters:
    ///     - force: specify `true` to force first responder to resign.
    open class func endEditing(_ force: Bool = false) {
        shared.endEditing(force)
    }

    /// Dismisses the keyboard from the key window of this 
    /// application instance.
    ///
    /// - Parameters:
    ///     - force: specify `true` to force first responder to resign.
    open func endEditing(_ force: Bool = false) {
        keyWindow?.endEditing(force)
    }

}

5
  import UIKit

  class ItemViewController: UIViewController, UITextFieldDelegate {

  @IBOutlet weak var nameTextField: UITextField!

    override func viewDidLoad() {
           super.viewDidLoad()
           self.nameTextField.delegate = self
     }

    // Called when 'return' key pressed. return NO to ignore.

    func textFieldShouldReturn(textField: UITextField) -> Bool {

            textField.resignFirstResponder()
             return true
     }

 // Called when the user click on the view (outside the UITextField).

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

5

नौसिखिए प्रोग्रामर के रूप में यह भ्रमित हो सकता है जब लोग अधिक कुशल और अनावश्यक प्रतिक्रियाओं का उत्पादन करते हैं ... आपको ऊपर दिखाए गए किसी भी जटिल सामान को करने की ज़रूरत नहीं है! ...

यहां सबसे आसान विकल्प है ... मामले में आपका कीबोर्ड टेक्स्टफील्ड के जवाब में प्रकट होता है - आपके टच स्क्रीन फ़ंक्शन के अंदर बस resignFirstResponder फ़ंक्शन जोड़ें । जैसा कि नीचे दिखाया गया है - कीबोर्ड बंद हो जाएगा क्योंकि फर्स्ट रिस्पोंडर रिलीज़ हो गया है (रिस्पोंडर श्रृंखला से बाहर निकलकर) ...

override func touchesBegan(_: Set<UITouch>, with: UIEvent?){
    MyTextField.resignFirstResponder()
}

5

मैंने कीबोर्ड के लिए IQKeyBoardManagerSwift का उपयोग किया है। यह प्रयोग करने में आसान है। बस पॉड जोड़ें 'IQKeyboardManagerSwift'

आयात IQKeyboardManagerSwift और पर लिखने कोड didFinishLaunchingWithOptionsमें AppDelegate

///add this line 
IQKeyboardManager.shared.shouldResignOnTouchOutside = true
IQKeyboardManager.shared.enable = true

4

यह एक लाइनर एक UIView में सभी (किसी भी) UITextField से कीबोर्ड को इस्तीफा देता है

self.view.endEditing(true)

4

स्विफ्ट में आप उपयोग कर सकते हैं

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

}

3

स्विफ्ट 3 के लिए

ViewDidLoad में ईवेंट पहचानकर्ता को पंजीकृत करें

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

तब हमें उसी दृश्य में दृश्य में जोड़ने की जरूरत हैDidLoad।

self.view.addGestureRecognizer(tap)

फिर हमें पंजीकृत पद्धति को शुरू करने की आवश्यकता है

func hideKeyBoard(sender: UITapGestureRecognizer? = nil){
    view.endEditing(true)
}

1
पूर्ण उत्तर के लिए और नोट्स के साथ धन्यवाद। यह एकमात्र समाधान है जिसने मेरे लिए काम किया।
जीशान

3

@ राजा-जादूगर के उत्तर को संपादित करने के बाद से एक नए उत्तर के रूप में पोस्टिंग अस्वीकार कर दी गई।

अपनी कक्षा को UITextField का प्रतिनिधि बनाएं और टचब्रेन को ओवरराइड करें।

स्विफ्ट 4

import UIKit

class ViewController: UIViewController, UITextFieldDelegate {

    @IBOutlet var textField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()
        textField.delegate = self
    }

    //Called when 'return' key is pressed. Return false to keep the keyboard visible.
    func textFieldShouldReturn(textField: UITextField) -> Bool {
        return true
    }

    // Called when the user clicks on the view (outside of UITextField).
    override func touchesBegan(touches: Set<UITouch>, with event: UIEvent?) {
        self.view.endEditing(true)
    }

}

3

viewDidLoad()विधि में कोड की सिर्फ एक पंक्ति :

view.addGestureRecognizer(UITapGestureRecognizer(target: view, action: #selector(UIView.endEditing(_:))))

2

आप कीबोर्ड को इस्तीफा देने के लिए एक टैप जेस्चर पहचानकर्ता भी जोड़ सकते हैं। : डी

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    let recognizer = UITapGestureRecognizer(target: self, action: Selector("handleTap:"))
    backgroundView.addGestureRecognizer(recognizer)
}
    func handleTap(recognizer: UITapGestureRecognizer) {
    textField.resignFirstResponder()
    textFieldtwo.resignFirstResponder()
    textFieldthree.resignFirstResponder()

    println("tappped")
}

2

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

@IBAction func dismissKeyboardButton(sender: AnyObject) {
    view.endEditing(true)
}

जेस्चर पहचानकर्ता के साथ समस्या मेरे लिए थी, कि यह उन सभी स्पर्शों को भी पकड़ लेती है जिन्हें मैं टेबल व्यू कॉल्स द्वारा प्राप्त करना चाहता था।


2

यदि आपके पास अन्य विचार हैं जो स्पर्श प्राप्त करने के साथ-साथ आपको सेट करना है cancelsTouchesInView = false

ऐशे ही:

let elsewhereTap = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard))
    elsewhereTap.cancelsTouchesInView = false
    self.view.addGestureRecognizer(elsewhereTap)

2
override func viewDidLoad() {
        super.viewDidLoad()

self.view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(tap)))

}

func tap(sender: UITapGestureRecognizer){
        print("tapped")
        view.endEditing(true)
}

यह कोशिश करो, यह काम कर रहा है


1

जब दृश्य में एक से अधिक पाठ फ़ील्ड होते हैं

कॉलिंग से बचने के लिए @ modocache की सिफारिश का पालन करने के लिए view.endEditing(), आप पहले रिस्पॉन्डर बने टेक्स्ट फ़ील्ड का ट्रैक रख सकते हैं, लेकिन यह गड़बड़ और त्रुटि-प्रवण है।

एक विकल्प है कि resignFirstResponder() सभी पाठ क्षेत्रों को व्यूकंट्रोलर में कॉल किया जाए । यहाँ सभी पाठ क्षेत्रों का संग्रह बनाने का एक उदाहरण है (जो कि वैसे भी सत्यापन कोड के लिए मेरे मामले में आवश्यक था):

@IBOutlet weak var firstName: UITextField!
@IBOutlet weak var lastName: UITextField!
@IBOutlet weak var email: UITextField!

var allTextFields: Array<UITextField>!  // Forced unwrapping so it must be initialized in viewDidLoad
override func viewDidLoad()
{
    super.viewDidLoad()
    self.allTextFields = [self.firstName, self.lastName, self.email]
}

उपलब्ध संग्रह के साथ, उन सभी के माध्यम से पुनरावृति करना एक साधारण बात है:

private func dismissKeyboard()
{
    for textField in allTextFields
    {
        textField.resignFirstResponder()
    }
}

तो अब आप dismissKeyboard()अपने जेस्चर पहचानकर्ता (या जहां भी आपके लिए उपयुक्त हो) को कॉल कर सकते हैं । दोष यह है कि आपको सूची को बनाए रखना चाहिएUITextField जब आप फ़ील्ड जोड़ते या हटाते हैं, तो आपको ।

टिप्पणियाँ स्वागत है। यदि resignFirstResponder()नियंत्रण पर कॉल करने में कोई समस्या है जो पहले उत्तरदाता नहीं हैं, या यदि वर्तमान प्रथम उत्तरदाता को ट्रैक करने का एक आसान और गारंटीकृत गैर-बुग्गी तरीका है, तो मुझे इसके बारे में सुनना अच्छा लगेगा!

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