সুইফট ব্যবহার করে যে কোনও জায়গায় স্পর্শ করে আইওএস কীবোর্ডটি বন্ধ করুন


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 (লক্ষ্য: স্ব, ক্রিয়া: # নির্বাচক (MyViewController.dismissKeyboard))
স্যাম

2
এটি টেবিলভিউ কনট্রোলারের উপর টেবিলভিউসেলের সেগটিকে ভেঙে দেয়
উত্কু ডালমাজ

11
এটি আমার মধ্যে আসা সবচেয়ে সহায়ক এক্সটেনশনগুলির মধ্যে একটি! ধন্যবাদ! আমি কেবলমাত্র সাবধানতাটি হ'ল এটি হস্তক্ষেপ করতে পারে didSelectRowAtIndexPath
ক্লিফটন ল্যাব্রাম

47
সবে এই প্রশ্নটি আবিষ্কার হয়েছে এবং সেই পদ্ধতিটি কার্যকর করেছে। টেবিলভিউ / ইউআইসিকল্যাশনভিউয়ের "ডায়ডলেক্টরো" দিয়ে সেই জিনিসটি আক্ষরিকভাবে আমাকে পাগল করে না। সমাধান হয়: কেবলমাত্র আপনার এক্সটেনশনের জন্য এই অ্যাড: tap.cancelsTouchesInView = false। এটি আমার পক্ষে কমপক্ষে সমাধান করেছে। আশা করি এটি কাউকে সাহায্য করবে
কোয়ান্টাম

10
"আমার রেপো পরীক্ষা করে দেখুন" হ'ল নতুন "হিয়ারস মাই মিক্সেক্সেপ": পি
জোশ

118

নীচে সুইফট ব্যবহার করে কীভাবে এক্সকোড 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 ছিল ঠিক কি আমি :) খুঁজছেন ছিল
Lukasz Czerwinski

4
এটি আমার পক্ষে বেশ কার্যকর হয়নি। আমি যদি ভিউ কন্ট্রোলারের ভিউতে ট্যাপ করি তবে এটি কাজ করে। যদি আমি ভিউতে কোনও নিয়ন্ত্রণ আইটেমটিতে আলতো চাপছি, কীবোর্ডটি খারিজ হয় না।
user3731622

এটি আমি এখনও অবধি ব্যবহার করেছি সেরা উত্তর! এই উত্তরটি সঠিক হিসাবে চিহ্নিত করা উচিত। ধন্যবাদ মানুষ!
ওয়াগং

এটি আমি এখনও অবধি দেখলাম সেরা সমাধান। ছোট নোট: নতুন সুইফটে ওভাররাইডের স্বাক্ষরটি কিছুটা বদলেছে। স্পর্শ করার আগে আপনাকে _ যুক্ত করতে হবে: ওভাররাইড ফানক টাচসবেগান (_ স্পর্শ: সেট <ইউটিউচ>, ইভেন্টের সাথে: ইউআইইভেন্ট?)
রেজিস সেন্ট-জেলাইস

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()

কোনও ইউআইআরআইএসপেন্ডারের যেমন কোনও ইউআইটিেক্সটফিল্ড instance আপনি যদি বর্তমানে সেই ভিউটিতে কল করেন যা বর্তমানে কীবোর্ডটি প্রদর্শিত হতে পারে তবে কীবোর্ড খারিজ হয়ে যাবে।


5
এমন পরিস্থিতিতে যেখানে আপনি প্রথম জবাবদিহিটি ঠিকঠাক জানেন না, পদত্যাগ করুন ফার্স্ট রেসপন্ডার () সমস্যার একগাদা হতে পারে। এসকের উত্তর নীচে (ভিউ.ডোনএডিটিং () ব্যবহার করে) অনেক বেশি উপযুক্ত
শিজার

1
যখনই আমি আমার পাঠ্যপত্রে পদত্যাগপত্রে প্রথম প্রতিযোগিতা ব্যবহার করি অ্যাপ্লিকেশানের ক্রাশ। আমি যা ভাবতে পারি তার চেষ্টা করেছি এবং ঠিক করার জন্য ওয়েবে ঘুরে দেখলাম। কিছুই আমাকে সাহায্য করে না। কেন এমন হয় তা জানতে আপনি কি ঘটবেন?
আগস্টো কিউ

1
শিজার যেমন বলেছিলেন এটি সেরা সমাধান নয় not প্লাস এটি সমস্ত পরিস্থিতিতে কাজ করে না।
অ্যালিক্স

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
    }

}

স্পর্শবিগান আমার পক্ষে পাঠ্যক্ষেত্র এবং পাঠ্যদর্শনের সম্পাদনা শেষ করতে কাজ করেছিল। ধন্যবাদ
সানজু

এটি আমি সাধারণ ব্যবহার করি। সমাধানটিতে ফোকাস করার জন্য সম্পর্কযুক্ত কোডগুলিও সরান।
জন দো

19

সুইফট 3 এর জন্য এটি খুব সহজ

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

আপনি যদি রিটার্ন কী টিপতে কীবোর্ডটি আড়াল করতে চান

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

তবে দ্বিতীয় ক্ষেত্রে আপনাকে সমস্ত পাঠ্য ফিল্ডগুলি থেকে মেইন.স্টিরিবোর্ডের ভিউকন্ট্রোলারের কাছে প্রতিনিধিও প্রেরণ করতে হবে


আমি unrecognized selector sent to instanceএই কোড সহ পেতে ।
Haring10

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
আমি মোটামুটি নিশ্চিত যে ভিউ.এন্ডএডিটিং (সত্য) কলটি এত সহজ যে এর জন্য আপনার কোনও ভেরিয়েবল সংরক্ষণ করার প্রয়োজন হয় না বা আপনার কেবল একটি পাঠ্য ক্ষেত্র রয়েছে বলে ধরে নেওয়া যায় না।
গ্লেন হাউস

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. টেবিলভিউ নির্বাচন করুন
  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

আইকিউ কীবোর্ডম্যানার ব্যবহার করুন যা আপনাকে সহজে সমাধানে সহায়তা করবে .....

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

! [কীবোর্ডটি কীভাবে অক্ষম করা যায় ..] [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

আমি খুঁজে পেয়েছি যে সেরা সমাধানটিতে কিছু সমাধানের সাথে @ এসকারুথের গৃহীত উত্তরগুলি অন্তর্ভুক্ত করা হয়েছে:

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 যুক্ত করুন:

দ্যডলিডে:

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

ফাংশন:

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

7

আপনার ভিউকন্ট্রোলারে এই এক্সটেনশনটি যুক্ত করুন:

  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

একজন নবজাতক প্রোগ্রামার হিসাবে বিভ্রান্তিকর হতে পারে যখন লোকেরা আরও দক্ষ এবং অপ্রয়োজনীয় প্রতিক্রিয়া প্রকাশ করে ... উপরের দেখানো জটিল জিনিসগুলির মধ্যে আপনার কোনও কাজ করার দরকার নেই! ...

এখানে সহজ বিকল্পটি ... ক্ষেত্রে যদি আপনার কীবোর্ডটি পাঠ্যক্ষেত্রের প্রতিক্রিয়াতে উপস্থিত হয় - আপনার টাচ স্ক্রিনের ক্রিয়াকলাপের ভিতরে কেবল পদত্যাগের ফার্স্ট রিসপন্ডার ফাংশন যুক্ত করুন। নীচে দেখানো হয়েছে - কীবোর্ডটি বন্ধ হবে কারণ প্রথম প্রতিক্রিয়াকারী প্রকাশিত হয়েছে (প্রতিক্রিয়াশীল চেইনটি প্রস্থান করছে) ...

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

5

আমি কীবোর্ডের জন্য আইকিউকিবোর্ডম্যানেজারসুইফ্ট ব্যবহার করি। এটা ব্যবহার করা সহজ. শুধু পোড যুক্ত করুন 'আইকিউ কীবোর্ডম্যানেজারসুইফ্ট'

আমদানি IQKeyboardManagerSwift এবং এর লেখার কোড didFinishLaunchingWithOptionsমধ্যে AppDelegate

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

4

এই একটি লাইনার ইউআইভিউতে সমস্ত (যে কোনও) ইউআইটিেক্সটফিল্ড থেকে কীবোর্ডকে পদত্যাগ করে

self.view.endEditing(true)


3

সুইফট 3 এর জন্য

ভিউডিডলডে একটি ইভেন্ট সনাক্তকারীকে নিবন্ধভুক্ত করুন

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

তারপরে আমাদের একই ভিউডিলডে ভিউতে অঙ্গভঙ্গিটি যুক্ত করতে হবে।

self.view.addGestureRecognizer(tap)

তারপরে আমাদের নিবন্ধিত পদ্ধতিটি শুরু করতে হবে

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

1
সম্পূর্ণ উত্তর এবং নোট সহ ধন্যবাদ। এটি আমার জন্য কাজ করা একমাত্র সমাধান।
জিশান

3

@ কিং-উইজার্ডের উত্তরটির আমার সম্পাদনা প্রত্যাখ্যান হওয়ার পরে নতুন উত্তর হিসাবে পোস্ট করা।

আপনার শ্রেণিটিকে ইউআইটিেক্সটফিল্ডের প্রতিনিধি করুন এবং বিগানকে ওভাররাইড করুন।

সুইফট 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

যখন ভিউতে একাধিক পাঠ্য ক্ষেত্র থাকে

কল এড়ানোর জন্য @ মোডোচেচের পরামর্শ অনুসরণ করুন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()নিয়ন্ত্রণগুলিতে কল করার ক্ষেত্রে যদি সমস্যা হয় যা প্রথম প্রতিক্রিয়াকারী নয়, বা যদি বর্তমানের প্রথম প্রতিক্রিয়াকারীকে ট্র্যাক করার একটি সহজ এবং গ্যারান্টিযুক্ত অ-বগি উপায় থাকে তবে আমি এটি সম্পর্কে শুনতে আগ্রহী!

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.