রিটার্ন কী টিপলে কী-বোর্ড কীভাবে দ্রুত সাফ করবেন?


214

আমি UITextfiedপাঠ্যযুক্ত কীবোর্ডে ক্লিক করার সময় উপস্থিত হব তবে যখন আমি returnকী টিপছি তখন কীবোর্ডটি অদৃশ্য হয় না। আমি নিম্নলিখিত কোড ব্যবহার করেছি:

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

পদত্যাগের পদত্যাগকারী কার্যকর হচ্ছে না।


10
আপনি কি আরএসসি উত্তর গ্রহণের বিষয়টি বিবেচনা করেছেন? উত্তর গ্রহণ করা যা এই জায়গাটিকে কাজ করে এবং একটি ভাল অনুশীলন হিসাবে বিবেচনা করা হয়।
জুয়ান বোয়েরো

7
যদি কোনও উত্তর আপনার প্রয়োজনীয়তা পূরণ করে তবে দয়া করে উত্তর হিসাবে চিহ্নিত করুন যাতে অন্য লোকেরা এ থেকে সহায়তা পেতে পারে।
সৈয়দ মোঃ কামরুজ্জামান

উত্তর:


397

আপনি নীচের ফাংশনটি ব্যবহার করে অ্যাপ্লিকেশনটিকে কীবোর্ড খারিজ করতে পারবেন

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    self.view.endEditing(true)
    return false
}

এখানে আরও ভাল উদাহরণের জন্য একটি সম্পূর্ণ উদাহরণ এখানে:

//
//  ViewController.swift
//
//

import UIKit

class ViewController: UIViewController, UITextFieldDelegate {

    @IBOutlet var myTextField : UITextField

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

        self.myTextField.delegate = self
    }

    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        self.view.endEditing(true)
        return false
    }
}

কোড উত্স: http://www.snip2code.com/Snippet/85930/swift-delegate-sample


22
আমি অনুপস্থিত ছিল "self.myTextField.delegate = স্ব;" ধন্যবাদ!
tylerlindell

4
আমি মিস করছি UITextFieldDelegate!
সিজারে

1
@ কমরেডহোমর, সন্দেহ নেই যে আরও কিছু আছে যা আপনার কীবোর্ডটি প্রদর্শন না করে চলেছে। আপনি যদি চান, আপনার কোডটি পেস্টবিনে রাখুন এবং আমার কাছে লিঙ্কটি দেখতে এটি এখানে পেস্ট করুন।
আরএসসি

1
@ আরএসসি আপনি সম্ভবত সঠিক ছিলেন। আমি
আইওএসে

1
সুতরাং আমার জন্য কাজ করুন (দ্রুত 3): এ func textFieldShouldReturn(textField: UITextField) -> Bool {পরিবর্তন করুন func textFieldShouldReturn(_ textField: UITextField) -> Bool {
সমুদ্র-কেজি

112

এর return trueঅংশটি কেবল পাঠ্যক্ষেত্রকেই বলে দেয় এটির ফিরে আসার অনুমতি রয়েছে কিনা।
কীবোর্ড খারিজ করতে আপনাকে পাঠ্য ক্ষেত্রটি ম্যানুয়ালি বলতে হবে (বা এটির প্রথম প্রতিক্রিয়াশীল যা কখনও), এবং এটি এর সাথে সম্পন্ন করা হয়েছে resignFirstResponder():

// Called on 'Return' pressed. Return false to ignore.

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

2
ধন্যবাদ ... আমার ক্ষেত্রে "পদত্যাগকারী ফার্স্ট রেসপন্ডার ()" পদ্ধতিটি স্বয়ংক্রিয়ভাবে পাচ্ছিল না এবং আমি ভেবেছিলাম যে এটি সমর্থন করছে না তবে ম্যানুয়ালি এটির কাজটি ঠিকঠাক লেখার সময় ... ধন্যবাদ যা আমি খুঁজছি।
অশ্বীকুমার মঙ্গরুলকর

@ আশ্বিনমঙ্গরুলকর আপনি আশা করতে পারেন যে এক্সকোড 6 এর বিটা সংস্করণে স্বয়ংক্রিয়তা সম্পন্ন বৈশিষ্ট্যটি প্রতিবন্ধী হতে পারে।
পল ব্রউভেসিনস্কি

1
এবং অবশ্যই "সত্য" এর পরের সেমিকোলনের আর প্রয়োজন নেই
36 ডিজাইন

1
আপনার ভিউকন্ট্রোলার মেনে চলার কি এটি প্রয়োজনীয়তা নয় UITextFieldDelegate?
মধু

1
সেলফ.ভিউ.এন্ড এডিটিং () এর পরিবর্তে এই উত্তরটি যথাযথ এবং সঠিক পদ্ধতির
saigen

45
  • যোগ UITextFieldDelegateবর্গ ঘোষণা করুন:

    class ViewController: UIViewController, UITextFieldDelegate
  • সংযুক্ত করুন textfieldবা প্রোগ্রামক্রমে লিখুন

    @IBOutlet weak var userText: UITextField!
  • আপনার ভিউ কন্ট্রোলারটিকে পাঠ্য ক্ষেত্রের প্রতিনিধি হিসাবে লোড করার সময় সেট করুন:

    override func viewDidLoad() {
    super.viewDidLoad()
    self.userText.delegate = self
    }
  • নিম্নলিখিত ফাংশন যুক্ত করুন

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

    এই সমস্ত কিছুর সাথে আপনার কীবোর্ডটি রিটার্ন কী টিপে পাঠ্যক্ষেত্রের বাহিরে স্পর্শ করে বরখাস্ত করা শুরু করবে।


ধন্যবাদ মানুষ! আমি এটি মিস করছি: UITextFieldDelegate... অনেক অনেক ধন্যবাদ!
অ্যাড্রিয়ানো তাডাও

কোনও কারণে, যখন আমি txtField.delegate = স্ব সেট করি, একবার অ্যাপ্লিকেশন চালানোর পরে আমি সেই পাঠ্যক্ষেত্রের মধ্যে টাইপ করতে পারি না
যিশু রডরিগেজ

@ জেসুস অ্যাডল্ফো রড্রিগেজ অবশ্যই সেই ত্রুটির পিছনে একটি কারণ থাকতে হবে, এই কোডটি কোনও সমস্যার কারণ নয়। : ডি শুভ কোডিং!
কোডেটার্ড

ধাপে ধাপে আপনাকে ধন্যবাদ। কোডটি ব্লক করার চেয়ে এটি আমার পক্ষে আরও সহায়ক ছিল।
কেনেকেলি

1
"এই সমস্ত কিছুর সাথে আপনার কীবোর্ডটি পাঠ্যক্ষেত্রের বাইরে স্পর্শ করে বরখাস্ত করা শুরু করবে" - সত্য নয়। টেক্সটফিল্ডশোল্ডার্টনকে কেবল রিটার্ন বোতাম টিপলেই বলা হয়।
জুরাসিক

39

সুইফট ৪.২ - কোনও প্রতিনিধি প্রয়োজন নেই

আপনি " প্রাথমিক অ্যাকশন ট্রিগারড" এর জন্য ইউআইটিেক্সটফিল্ড থেকে একটি অ্যাকশন আউটলেট তৈরি করতে পারেন এবং প্রেরণকৃত প্যারামিটারে প্রথম প্রতিক্রিয়াকারীকে পদত্যাগ করতে পারেন:

অ্যাকশন আউটলেট তৈরি করুন

@IBAction func done(_ sender: UITextField) {
    sender.resignFirstResponder()
}

সুপার সিম্পল

(স্কট স্মিথের 60০-সেকেন্ডের ভিডিওটি সম্পর্কে আমাকে এই সম্পর্কে জানানোর জন্য ধন্যবাদ: https://youtu.be/v6GrnVQy7iA )


আমাদের যদি কোনও পৃষ্ঠায় একাধিক পাঠ্যক্ষেত্র থাকে তবে প্রতিটি পাঠ্য ক্ষেত্রে আমাদের কি এটি করা দরকার ...
ড্রাগনফায়ার

@ ড্রাগনফায়ার আপনি একই আউটলেটে একাধিক পাঠ্যক্ষেত্র নির্ধারণ করতে পারেন। আপনার কোডের আইবিএक्शन-এ আউটলেট পরিদর্শকের (স্ক্রিনের বাম দিক) প্রাইমারি অ্যাকশন ট্রিগারড আউটলেট থেকে কেবল টেনে আনুন
ব্র্যাড রুট

এটি লক্ষ্য করা ভাল যে স্টোরিবোর্ডে পাঠ্য ক্ষেত্র থেকে সরাসরি টানলে প্রাইমারি অ্যাকশন ট্রিগারডের পরিবর্তে লিঙ্কিত ক্রিয়াটি সম্পাদনা ডিড এন্ডে ডিফল্ট হয়ে যায়, তাই এটি সাইডবারের সংযোগ পরিদর্শকের কাছ থেকে করা উচিত।
মেঘ

অ্যামেজিং। আমি যে জানি না। ধন্যবাদ।
নুমান কারাআস্লান

কেউ যদি এখনও যত্ন করে থাকে তবে সুইফট 2 এর সাথেও কাজ করে। ধন্যবাদ।
siralexsir88

22

সাধারণ সুইফট 3 সমাধান: পাঠ্য ক্ষেত্রের বৈশিষ্ট্যযুক্ত এমন আপনার ভিউ কন্ট্রোলারে এই ফাংশনটি যুক্ত করুন:

@IBAction func textField(_ sender: AnyObject) {
    self.view.endEditing(true);
}

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


14

@RSC

আমার জন্য এক্সকোড সংস্করণ 6.2 ​​(6C86e) এর সমালোচনা সংযোজন রয়েছে override func viewDidLoad()

 self.input.delegate = self;

আমি আপনার পোস্ট, আরএসসি না পাওয়া পর্যন্ত কয়েক ঘন্টা ধরে এটি রিটার্ন কী দিয়ে কাজ করার চেষ্টা করেছি। ধন্যবাদ!

এছাড়াও, আপনি যদি স্ক্রিনের অন্য কোথাও স্পর্শ করেন তবে কীবোর্ডটি আড়াল করতে চান:

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

12

স্বয়ংক্রিয় কীবোর্ড বরখাস্ত হওয়ার জন্য, আমি আমার কাস্টম পাঠ্য ক্ষেত্রের শ্রেণীর একটি পদ্ধতির ভিতরে এই কোডটি রেখেছি:

textField.addTarget(nil, action:"firstResponderAction:", forControlEvents:.EditingDidEndOnExit)

আপনার আউটলেটের নামটির বিকল্প দিন textField


1
বিশিষ্ট। এটি আমার মতে সবচেয়ে সংক্ষিপ্ত এবং সর্বোত্তম বিকল্প। বিশেষত যখন আপনি অন্য পদ্ধতির অভ্যন্তরে একটি পাঠ্য ক্ষেত্র তৈরি করছেন। টেবিল ভিউ শিরোলেখের মতো Like
কাকুবেই

দুঃখিত, আপনি এটি ঠিক কোথায় রাখবেন এবং কীবোর্ডটি বন্ধ করার জন্য আপনাকে কী করতে হবে? আমি mytextfield.addTarget(nil, action:Selector(("firstResponderAction:")), for:.editingDidEndOnExit)(সুইফট 5 সংস্করণ) এ রেখেছি viewDidLoadতবে টেক্সটফিল্ডের বাইরে কোথাও ফিরতে বা আলতো চাপতে চেষ্টা করি না। আমি প্রতিটি আউটলেট তৈরি করে পাঠ্যক্ষেত্রগুলি পেয়েছি।
নেফ

আমি এটি একটি কাস্টম ক্লাসের সাবক্লাসে রেখেছি যা ইউআইভিউউকন্ট্রোলার থেকে উত্তরাধিকার সূত্রে প্রাপ্ত। সাবক্লাসটি ইউআইটিএক্সেক্সটভিউ ডেলেগেট এবং ইউআইটিেক্সটফিল্ডডেলিগেটকেও মেনে চলে। আমি viewDidAppearএই ক্লাসের পদ্ধতিতে রেখেছি । UIAlertController.addTextField(configurationHandler: {(textField: UITextField!) in textField.delegate = self textField.addTarget(self, action: #selector(MySubclass.textChanged(_:)), for: .editingChanged) })এটি আমার ক্ষেত্রে খুব সামান্য নির্দিষ্ট হতে পারে তবে আশা করি এটি সাহায্য করবে it ভিতরে কল করার চেষ্টা করুন এবং viewDidAppearপ্রয়োজনে কোনও প্রতিনিধিদের সাথে সামঞ্জস্য করুন।
টাইপ

10

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

@IBAction func resignKeyboard(sender: AnyObject) {
    sender.resignFirstResponder()
}

Did End On Exitপ্রতিটি ক্ষেত্রের ইভেন্টে সেই दृশিকে নিয়ন্ত্রকের জন্য আপনার সমস্ত পাঠ্য ক্ষেত্রটি সংযুক্ত করুন ।


দ্বন্দ্বের জন্য দুঃখিত, তবে আমি আমার অ্যাপে এই পদ্ধতিটি ব্যবহার করে দেখছি এবং এটি কাজ করছে বলে মনে হচ্ছে না। নেভিগেশন বারে আমার একটি পাঠ্য ক্ষেত্র রয়েছে এবং আপনি যেমনটি বলেছেন তেমনই এই ইভেন্টটির সাথে আমি এই ক্রিয়াটির সাথে এটি সংযুক্ত করেছি, তবে এটি রানটাইমে কাজ করে না।
wasimsandhu

প্রেরক যদি UIBarButtonItem টাইপের হয় তবে এটি ক্রাশ হবে। যদি আমি সংখ্যার কীপ্যাডে ডোন বোতাম সহ সরঞ্জামদণ্ডটি যুক্ত করি তবে আপনার কোডটি অবিজ্ঞাত নির্বাচকের সাথে টুকরো টুকরো টুকরো টুকরো প্রবেশের জন্য প্রেরণ করা হবে with
জয়প্রকাশ দুবে

8

আমি আরএসসি থেকে ক্লাস শুরু করার পক্ষে চেষ্টা করব:

import Foundation
import UIKit

// Don't forget the delegate!
class ViewController: UIViewController, UITextFieldDelegate {

required init(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

@IBOutlet var myTextField : UITextField?

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

    self.myTextField.delegate = self;
}

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

func textFieldShouldReturn(textField: UITextField!) -> Bool {
    self.view.endEditing(true);
    return false;
}

}


8

ব্যবহারকারী যখন পাঠ্য কীবোর্ডে সমাপ্ত বোতামটি ট্যাপ করেন, তখন ডিড এন্ড প্রস্থান ইভেন্ট উত্পন্ন হবে; সেই সময়, আমাদের পাঠ্য ক্ষেত্রটি নিয়ন্ত্রণ ছেড়ে দিতে বলা উচিত যাতে কীবোর্ডটি চলে যায়। এটি করার জন্য, আমাদের নিয়ামক শ্রেণিতে একটি ক্রিয়া পদ্ধতি যুক্ত করা দরকার। ViewController.swift নির্বাচন করুন নিম্নলিখিত ক্রিয়া পদ্ধতি যুক্ত করুন:

@IBAction func textFieldDoneEditing(sender: UITextField) {
sender.resignFirstResponder()}

প্রকল্প নেভিগেটরে মেইন.স্টরিবোর্ড নির্বাচন করুন এবং সংযোগ পরিদর্শক আনুন। স্টোডবোর্ডের হলুদ ভিউ কন্ট্রোলার আইকনে ডিড এন্ড অন প্রস্থানের পাশের চেনাশোনা থেকে টানুন এবং যেতে দিন। একটি ছোট পপ-আপ মেনুতে উপস্থিত হবে একটি একক ক্রিয়াকলাপের নাম, যা আমরা সবে যুক্ত করেছি। এটি নির্বাচন করতে পাঠ্যফিল্ডডোনএডিটিং ক্রিয়াকলাপটি ক্লিক করুন এবং এটিই।


8

পিসটাইপের মন্তব্যে এখানে সুইফট 3.0 আপডেট রয়েছে:

textField.addTarget(nil, action:Selector(("firstResponderAction:")), for:.editingDidEndOnExit)

এটি একটি পরিষ্কার উত্তর
po5i

এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। একক চেষ্টা করে কাজ করেছেন।
যশবন্ত সিং

7

আমি প্রতিটি ইউআইভিউকন্ট্রোলারে একই ফাংশন যুক্ত করতে ঘৃণা করি। ইউআইটিভিউসকন্ট্রোলারকে ইউআইটিেক্সটফিল্ডডেলিগেট সমর্থন করার জন্য প্রসারিত করে আপনি "রিটার্ন চাপানো" একটি ডিফল্ট আচরণ সরবরাহ করতে পারেন।

extension UIViewController: UITextFieldDelegate{
    public func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        return true;
    }
}

আপনি যখন নতুন ইউআইভিউকন্ট্রোলার এবং ইউআইটিেক্সটফিল্ড তৈরি করেন, আপনাকে যা করতে হবে তা হ'ল আপনার ইউআইভিউকন্ট্রোলারে একটি লাইন কোড লিখতে হবে।

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

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


5

সুইফট 3

নীচে এই কোডটি আপনার ভিসিতে যুক্ত করুন

//hide keyboard when user tapps on return key on the keyboard
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    self.view.endEditing(true);
    return false;
}

আমার জন্য কাজ কর


3

আপনার টেক্সটফিল্ড প্রতিনিধি সেই ভিউ কন্ট্রোলারে সেট করা আছে তা থেকে আপনি নিজের টেক্সটফিল্ড সম্পর্কিত কোডটি লিখছেন তা নিশ্চিত করুন।

self.textField.delegate = self

3

দ্রুতগতি

থেকে alচ্ছিক ফাংশন ব্যবহার করে UITextFieldDelegate

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

falseতার মানে এই ক্ষেত্রটিকে পদত্যাগ করতে বলা যেতে পারে। true- বল পদত্যাগ।


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

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

তারপরে আপনি এই ফাংশনটি ব্যবহার করুন

func handleScreenTap(sender: UITapGestureRecognizer) {
    self.view.endEditing(true)
}

2

আপনি এটিকে যে কোনও জায়গায় রাখতে পারেন তবে কোনও ইউআইবাটনে নয়

 func TextFieldEndEditing(text fiend name: UITextField!) -> Bool
{
    return (false)
}

তারপরে আপনি এই কোডটি একটি বোতামে রাখতে পারেন (উদাহরণস্বরূপ):

self.view.endEditing(true)

এটি আমার জন্য কাজ করেছে


2

ভিউ কন্ট্রোলারে আপনি ব্যবহার করছেন:

//suppose you are using the textfield label as this

@IBOutlet weak var emailLabel: UITextField!
@IBOutlet weak var passwordLabel: UITextField!

//then your viewdidload should have the code like this
override func viewDidLoad() {
        super.viewDidLoad()

        self.emailLabel.delegate = self
        self.passwordLabel.delegate = self

    }

//then you should implement the func named textFieldShouldReturn
 func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        return true
    }

// -- then, further if you want to close the keyboard when pressed somewhere else on the screen you can implement the following method too:

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

আমি টাচসবেগান ফানক পছন্দ করি, দ্রুত 4 এ কাজ করে ধন্যবাদ আপনাকে ধন্যবাদ।
এজে হার্নান্দেজ 21


-1

সমস্ত ওয়ান হাইড কীবোর্ড এবং কীবোর্ডে সরানো দেখুন খুলুন: সুইফ্ট 5

override func viewDidLoad() {
    super.viewDidLoad()
    let tap = UITapGestureRecognizer(target: self, action: #selector(taped))
    view.addGestureRecognizer(tap)
    NotificationCenter.default.addObserver(self, selector: #selector(KeyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(KeyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil)
}


   override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(true)
    NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillShowNotification, object: nil)
    NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillHideNotification, object: nil)
}
 @objc func taped(){

    self.view.endEditing(true)

}

@objc func KeyboardWillShow(sender: NSNotification){

    let keyboardSize : CGSize = ((sender.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue.size)!
    if self.view.frame.origin.y == 0{
        self.view.frame.origin.y -= keyboardSize.height
    }


}

@objc func KeyboardWillHide(sender : NSNotification){

    let keyboardSize : CGSize = ((sender.userInfo?[UIResponder.keyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue.size)!
    if self.view.frame.origin.y != 0{
        self.view.frame.origin.y += keyboardSize.height
    }

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