আইওএস - ইউআইটিেক্সটফিল্ডের বাইরের স্পর্শ করার সময় কীবোর্ড খারিজ করুন


461

আমি ভাবছি কীভাবে কীবোর্ডটি অদৃশ্য করা যায় যখন ব্যবহারকারী এ এর ​​বাইরে স্পর্শ করে UITextField


8
দিমিত্রি এর সঠিক উত্তর ছিল। এটি কোনও অঙ্গভঙ্গির সমস্যা নয় - এটি প্রথম প্রতিক্রিয়াশীলকে পদত্যাগ করার সমস্যা। Dmirty এর উত্তর এছাড়াও সমাধান মার্ক, বাদামসংগ্রহ এবং LeMarche সুপারিশ আইওএস 4 ডেভেলপমেন্ট শুরু , অধ্যায় 4, পৃষ্ঠা 83.
jww

উত্তর:


760

আপনাকে একটি যুক্ত করতে UITapGestureRecogniserহবে এবং এটিকে ভিউতে অর্পণ করতে হবে, এবং তারপরে UITextFieldনির্বাচকটির উপর প্রথমে পদত্যাগকারীকে কল করুন।

কোড:

ভিউডিডলডে

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];

[self.view addGestureRecognizer:tap];

বরখাস্ত কীবোর্ডে:

-(void)dismissKeyboard 
{
    [aTextField resignFirstResponder];
}

( aTextFieldপাঠ্যক্ষেত্রটি কী-বোর্ডের জন্য দায়বদ্ধ)

সুইফট 3 সংস্করণটি দেখতে এমন দেখাচ্ছে

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

বরখাস্ত কীবোর্ডের জন্য

func dismissKeyboard (_ sender: UITapGestureRecognizer) {
    aTextField.resignFirstResponder()
}

6
এটি কাজ করে কিন্তু এটি যা করে তা হ'ল নেভিগেশন বার বোতামগুলি অবিস্মরণীয় হিসাবে তৈরি করে। সুতরাং এই জন্য কাজ আছে?
পার্থ ভট্ট

137
আমি মনে করি এটির চেয়ে ভাল [aTextField resignFirstResponder]যেহেতু [self.view endEditing:YES];এটি পাঠ্যের ক্ষেত্রে কোনও রেফারেন্সের প্রয়োজন হবে না এবং একাধিক পাঠ্যক্ষেত্রের জন্য কাজ করবে
জুলিয়ান ক্রিল

90
সুতরাং কোনও পদ্ধতি নির্ধারণ না করে একটি ওয়ান-লাইনার [self.view addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self.view action:@selector(endEditing:)]];
সুভাষ

8
@ পার্থব্যাট আমি [tap setCancelsTouchesInView:NO];@ কিয়াওয়ের উত্তর অনুসারে যোগ করেছি ; আমার একটি সারণী সারি নির্বাচনের প্রতিক্রিয়া না জানিয়ে একটি সমস্যা ছিল। 5 বছর পরে, আমি আশা করি এটি অন্য কাউকে সাহায্য করবে।
টম হাওয়ার্ড

7
সুইফ্ট ওয়ান-লাইনার: self.view.addGestureRecognizer(UITapGestureRecognizer(target: self.view, action: #selector(UIView.endEditing(_:))))
মলফুনশন

176

আমি কয়েকটি উত্তর জড়ালাম।

একটি আইভার ব্যবহার করুন যা সময়কালে আরম্ভ হয় viewDidLoad:

UIGestureRecognizer *tapper;

- (void)viewDidLoad
{
    [super viewDidLoad];
    tapper = [[UITapGestureRecognizer alloc]
                initWithTarget:self action:@selector(handleSingleTap:)];
    tapper.cancelsTouchesInView = NO;
    [self.view addGestureRecognizer:tapper];
}

বর্তমানে যা সম্পাদনা করছে তা খারিজ করুন:

- (void)handleSingleTap:(UITapGestureRecognizer *) sender
{
    [self.view endEditing:YES];
}

কল্পনাপ্রসূত, এটি ইউআইটিএবলভিউতে কাজ করে !! এটা আমার দিন বাঁচাতে! পার্শ্ব নোট হিসাবে আমি [ইউআইভিউ এন্ড এডিটিং:] এর পরিবর্তে [ইউআইটিেক্সটফিল্ড ইস্তেগফার্স ফার্স্ট রিসপন্ডার] ব্যবহার করব কারণ আমার আরও ইউআইটিেক্সটফিল্ড রয়েছে এবং নতুন ইউআইটিেক্সটফিল্ড দৃশ্যমান হওয়া সত্ত্বেও এডিটিং একটি ভুল স্ক্রোলিং অবস্থান দেয়।
ডঃ লুইজি

1
মৃত ভুল কারণ UITapGestureR সনাক্তকারীকে দর্শনটিতে কখনই যুক্ত করা হয় না!

1
এখানে বাতিলকরণ টাচআইনভিউয়ের উদ্দেশ্য কী?
অ্যাডাম জনস

3
আপনি যদি এখানে ক্যান্সেলস টাচআইনভিউ = মিথ্যা না যোগ করেন, তবে আপনি আপনার দৃষ্টিতে অন্য ধরণের আইটেম নির্বাচন করতে পারবেন না। আপনার ট্যাপগুলি অঙ্গভঙ্গি সনাক্তকারী দ্বারা বাধা দেওয়া হবে।
হালরা

104

এটি দেখুন, এটি করার সহজ উপায় এটি হবে,

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
      [self.view endEditing:YES];// this will do the trick
}

অথবা

এই লাইব্রেরিটি স্ক্রোলবার অটো স্ক্রোলিং, কীবোর্ডটি আড়াল করার জন্য স্পেস ট্যাপ করে ইত্যাদি সহ পরিচালনা করবে ...

https://github.com/michaeltyson/TPKeyboardAvoiding


@ রামেশ হ্যাঁ এটি করে তবে এইভাবে নয়। আপনাকে ইউআইটিএবলভিউ থেকে একটি সাবক্লাস তৈরি করতে হবে এবং সেই শ্রেণীর অভ্যন্তরে টাচবেগান পদ্ধতিটি প্রয়োগ করতে হবে এবং তারপরে এন্ডেডিটিং পদ্ধতিটি কল করতে হবে। এটা কাজ করে! সদ্য নির্মিত শ্রেণীর সাথে নিবিলে আপনার টেবিলের জন্য শ্রেণি নির্ধারণ করতে ভুলবেন না।
প্রসাদ দে জোয়েসা

3
ব্যবহারকারী যখন দেখার উপর অন্যান্য নিয়ন্ত্রণগুলিতে স্পর্শ করে তখন এটি কীবোর্ডটি লুকায় না। উদাহরণস্বরূপ: ইউআইভিউতে আমার একটি ইউআইবাটন এবং ইউআইটিেক্সটফিল্ড রয়েছে। আমি ইউআইটিেক্সটফিল্ডে আলতো চাপছি, তারপরে বোতামে আলতো চাপছি, কীবোর্ড এই ক্ষেত্রে লুকায় না।
জ্যাকব ড্যাম

2
@ জ্যাকবড্যাম আপনি ঠিক বলেছেন লক্ষ্যটি হ'ল টেক্সটফিল্ডের বাইরে যদি কিছু ঘটে তবে কীবোর্ডটি আড়াল করার জন্য প্রতিবেদকের পদত্যাগ করা to

88

আমি দেখছি যে UITapGestureRecognizerপদ্ধতিটি ব্যবহার করে কিছু লোকের সমস্যা হচ্ছে । আমার বিদ্যমান বোতামের ট্যাপ আচরণটি অক্ষত রেখেই আমি এই কার্যকারিতাটি সম্পাদন করার সবচেয়ে সহজ উপায়টি @ জেনসেন 2 কে এর উত্তরে কেবল একটি লাইন যুক্ত করছে:

[tap setCancelsTouchesInView:NO];

এটি আমার বিদ্যমান বোতামগুলিকে @ ডিমিত্রি সিত্নিকভের পদ্ধতি ব্যবহার না করেই এখনও কাজ করতে দেয়।

propertyএখানে সে সম্পর্কে পড়ুন (অনুসন্ধান করুন CancelsTouchesInView): ইউআইজিস্টেকররনগাইজার ক্লাস রেফারেন্স

আমি নিশ্চিত না যে এটি কীভাবে স্ক্রোলবারগুলির সাথে কাজ করবে, যেমন আমি দেখি কারও কারও সাথে সমস্যা ছিল তবে আশা করি অন্য কেউ আমার মতো একই দৃশ্যে চলে যেতে পারে।


3
আমিও যুক্ত করতে চাই, যাঁরা দৃশ্যের পিছনে একটি পটভূমি চিত্র ব্যবহার করছেন তাদের UIImageViewযুক্ত করুন, [imageView setUserInteractionEnabled:NO];এবং আপনি এটি "মাধ্যমে" ক্লিক করুন, যা এই পদ্ধতিটিকে কাজ করে।
পল পিলেন

55

আপনার ইন্টারফেস বিল্ডারে UIViewএকটি উদাহরণ তৈরি করা UIControlএবং তারপরে তাদের TouchUpInsideইভেন্টটি dismissKeyboardপদ্ধতির সাথে সংযুক্ত করা ভাল । এই IBActionপদ্ধতিটি দেখতে পাবেন:

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

1
ধন্যবাদ! এটি আমার পক্ষে কাজ করেছে এবং অন্যান্য সমাধান তা করেনি। ( UITapGestureRecognizerভিউয়ের ভিতরে বোতামে আলতো চাপ দিয়ে হস্তক্ষেপ করা)। প্রতিক্রিয়াশীল চেইনের সাথে কোনও touchesEndedUIScrollView
গোলযোগ

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

4
আপনার ইউআইভিউউকে একটি ইউআইসিএন্ট্রোল করার দরকার নেই। নিশ্চিত করুন যে ইউআইভিউ-র ব্যবহারকারীর ইন্টারঅ্যাকশন সক্ষম হয়েছে।
সোফি সফ্টওয়্যার এলএলসি

1
@ সোফিসফ্টওয়্যার এলএলসি আপনার পরামর্শটি আমার পক্ষে কার্যকর হয়নি। ব্যবহারকারীর ইন্টারঅ্যাকশন সক্ষম করার সময়ও আমাকে এটি ইউআইসিএন্ট্রোল করতে হয়েছিল।
থ্রি-কাপ

1
স্টোরিবোর্ড ব্যবহার করে আমি ইউআইভিউউকে ইউআইসিএন্ট্রোলতে পরিবর্তন করেছি (যেখানে আমি একটি ইউআইভিউ সাবক্লাসটি তৈরি করেছিলাম যদি আমি এটি তৈরি করি)। এটি ভালই কাজ করে. আমি কোন ইস্যুতে চালিত হই নি। iOS8।
টডবি

30

সুইফট 4

UIViewControllerএই এক্সটেনশন পদ্ধতিটি দিয়ে একবার সেটআপ করুন যেমন viewDidLoad:

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

এবং টিপ দিয়ে এমনকি কীবোর্ডটি খারিজ করা হবে NavigationBar

import UIKit
extension UIViewController {
    /// Call this once to dismiss open keyboards by tapping anywhere in the view controller
    func setupHideKeyboardOnTap() {
        self.view.addGestureRecognizer(self.endEditingRecognizer())
        self.navigationController?.navigationBar.addGestureRecognizer(self.endEditingRecognizer())
    }

    /// Dismisses the keyboard from self.view
    private func endEditingRecognizer() -> UIGestureRecognizer {
        let tap = UITapGestureRecognizer(target: self.view, action: #selector(self.view.endEditing(_:)))
        tap.cancelsTouchesInView = false
        return tap
    }
}

2
ভাই, আপনি এটি পেরেক !! এই উত্তরটি নিখুঁত এবং সত্যই দুর্দান্ত কাজ করে, আপনাকে অনেক ধন্যবাদ।
মরিচা

28

সুইফ্ট সংস্করণ, এটি অন্যান্য উপাদানের সাথে মিশ্রণে কাজ করে (যেমন একটি UIButtonবা অন্য UITextField):

override func viewDidLoad() {
    super.viewDidLoad()

    let tapper = UITapGestureRecognizer(target: self, action:#selector(endEditing))
    tapper.cancelsTouchesInView = false
    view.addGestureRecognizer(tapper)
}

1
লক্ষ্যটি selfতার চেয়ে বেশি হওয়া উচিতself.view
EI ক্যাপ্টেন v2.0

1
লক্ষ্যটি স্ব.উভিউ হওয়া উচিত। অন্যথায়, উপরের কোডটি ক্রাশ হবে।
নাগা মললেশ মাদদালি

canclesTouchesInViewব্যবহার করার জন্য একটি সুবিধাজনক সম্পত্তি। ধন্যবাদ।
জোনস্লোসিএন

পুরানো অভ্যাস দূর করা কঠিন. সেমিকোলন এখানে কি করছে? ;)
আলেকজান্দ্রে জি।

@AlexandreG। আসলে, বিশেষত যেহেতু আমি সাধারণত কোডিং করছি c#। এফওয়াইআই সেমিকোলন সিনট্যাক্স-অনুমোদিত, এটি কেবল প্রয়োজনীয় নয়।
রব

17

এটি সম্পর্কে কীভাবে: আমি জানি এটি একটি পুরানো পোস্ট। এটি কাউকে সাহায্য করতে পারে :)

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {  
    NSArray *subviews = [self.view subviews];
    for (id objects in subviews) {
        if ([objects isKindOfClass:[UITextField class]]) {
            UITextField *theTextField = objects;
            if ([objects isFirstResponder]) {
                [theTextField resignFirstResponder];
            }
        } 
    }
}

আমি ইউআইটিেক্সটফিল্ডের জন্য চেক করিনি তাই এটি কোনও ইনপুট প্রকারের জন্য কাজ করে। কোনও সমস্যা দেখছি না।
ফ্রাঙ্ক

15

এটি একটি ভাল জেনেরিক সমাধান:

উদ্দেশ্য গ:

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

সুইফট:

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

@ আইকোডবাস্টার সমাধানের ভিত্তিতে: https://stackoverflow.com/a/18756253/417652



10

আমি মনে করি এটির সবচেয়ে সহজ (এবং সর্বোত্তম) উপায় হ'ল আপনার গ্লোবাল ভিউ সাবক্লাস করা এবং hitTest:withEventকোনও স্পর্শ শোনার জন্য পদ্ধতিটি ব্যবহার করা । কীবোর্ডে স্পর্শগুলি নিবন্ধভুক্ত করা হয়নি, সুতরাং হিট টেস্ট: উইভেন্টটি কেবল তখনই ডাকা হয় যখন আপনি স্পর্শ / স্ক্রোল / সোয়াইপ / চিম্টি ... অন্য কোথাও কল করেন, তারপরে কল করুন [self endEditing:YES]

এটি ব্যবহার করার চেয়ে ভাল touchesBeganকারণ কারণ touchesBeganআপনি যদি দেখার উপরে অবস্থিত একটি বোতামে ক্লিক করেন তবে বলা হয় না। এটি তুলনায় ভাল UITapGestureRecognizerযা উদাহরণস্বরূপ কোনও স্ক্রোলিং অঙ্গভঙ্গি সনাক্ত করতে পারে না। ম্লান স্ক্রিন ব্যবহার করার চেয়ে এটি আরও ভাল কারণ একটি জটিল এবং গতিশীল ইউজার ইন্টারফেসে আপনি কোথাও ম্লান স্ক্রিন রাখতে পারবেন না। তদ্ব্যতীত, এটি অন্যান্য ক্রিয়াকে অবরুদ্ধ করে না, বাইরে বোতামটি নির্বাচন করতে আপনাকে দুবার আলতো চাপতে হবে না (যেমন এটার ক্ষেত্রে UIPopover)।

এছাড়াও, এটি কল করার চেয়ে ভাল [textField resignFirstResponder], কারণ আপনার পর্দায় অনেকগুলি পাঠ্য ক্ষেত্র থাকতে পারে, সুতরাং এটি তাদের সবার জন্য কাজ করে।


দুর্ভাগ্যক্রমে, পাঠ্য সাফ করার জন্য এটি ইউআইএসফোবারের 'এক্স' এর সাথে হস্তক্ষেপ বলে মনে হচ্ছে।
হুগি

1
এই পদ্ধতির সাথে কিছু সমস্যা আছে। উদাহরণস্বরূপ, আপনি আপনার পাঠ্যক্ষেত্রের উপর ফোকাস না হারিয়ে স্ক্রোলভিউ স্ক্রোল করতে পারবেন না। আরও জটিল পরিস্থিতিগুলির জন্য পরামর্শযুক্ত নয় ... ব্যক্তিগতভাবে আমি দিমিত্রি থেকে ইউিকন্ট্রোল-সংস্করণ পছন্দ করি, সম্ভবত সোফি সফ্টওয়্যার থেকে আগত দ্বারা প্রসারিত।
katzenhut

স্ক্রোলিংয়ের একটি উদাহরণ ইমেল অ্যাপ্লিকেশনটিতে রয়েছে, আপনি যখন অনুসন্ধান বারে টাইপ করেন এবং তারপরে মেল তালিকাটি স্ক্রোল করেন, কীবোর্ডটি বরখাস্ত হয়।
এনজো ট্রান

এটি সর্বোত্তম পন্থা এবং আমার অন্যান্য প্রকল্পগুলিতে করেছে।
চন্দ্রমণি 4'18

8

বাইরের স্পর্শ করে এটি আপনার কীবোর্ডটি আড়াল করার সহজতম উপায় হতে হবে:

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

( যখন পাঠ্যক্ষেত্রের বাইরের অন্যান্য অঞ্চল ট্যাপ করবেন তখন কী-বোর্ড কীভাবে খারিজ করবেন? )


6

যদি ভিউটি পুরোপুরি এম্বেড থাকে UIScrollViewতবে আপনি নিম্নলিখিতটি ব্যবহার করতে পারেন:

tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag;
tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeInteractive;

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

নোট করুন যে এগুলি আইওএস 7.0 বা তার উপরেরগুলিতে উপলব্ধ।


6

আপনি এক্সকোড 6 এবং তারপরে স্টোরিবোর্ডটি ব্যবহার করে এটি করতে পারেন:


কীবোর্ডটি লুকানোর জন্য ক্রিয়া তৈরি করুন

আপনার ভিউকন্ট্রোলার দ্বারা ব্যবহৃত ক্লাসের শিরোলেখ ফাইলটিতে এটি যুক্ত করুন:

@interface TimeDelayViewController : UIViewController <UITextFieldDelegate>

- (IBAction)dissmissKeyboardOnTap:(id)sender;

@end

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

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

এটি এখন আপনার স্টোরিবোর্ডের দৃশ্যের জন্য (যেমন দেখুন নিয়ন্ত্রণকারী) এক 'গৃহীত পদক্ষেপ' এর মধ্যে একটি হবে:

এখানে চিত্র বর্ণনা লিখুন


ব্যবহারকারীর ইভেন্টে অ্যাকশনটি হুক আপ করুন

কীবোর্ডটি ছোঁয়ার ব্যবহারকারীর অঙ্গভঙ্গিতে এখন আপনার এই ক্রিয়াটি হুক করা দরকার।

গুরুত্বপূর্ণ - আপনার স্টোরিবোর্ডে থাকা 'ইউআইভিউ' রূপটি আপনাকে একটি ইউআইসিএন্ট্রোলতে রূপান্তর করতে হবে, যাতে এটি ইভেন্টগুলি পেতে পারে। আপনার ভিউ কন্ট্রোলার দৃশ্যের স্তরক্রম থেকে দর্শনটি নির্বাচন করুন:

এখানে চিত্র বর্ণনা লিখুন

... এবং এর শ্রেণী পরিবর্তন করুন:

এখানে চিত্র বর্ণনা লিখুন

এখন আপনার দৃশ্যের জন্য 'প্রাপ্ত ক্রিয়াকলাপের' পাশের ছোট চেনাশোনাটি থেকে আপনার দৃশ্যের একটি 'খালি' অংশে টানুন (বাস্তবে আপনি 'রিসিভ অ্যাকশন' ইউআইসিএন্ট্রোল এ টানছেন)। আপনাকে এমন ইভেন্টগুলির একটি নির্বাচন দেখানো হবে যাতে আপনি নিজের ক্রিয়াটি এতে আঁকতে পারেন:

এখানে চিত্র বর্ণনা লিখুন

'টাচ আপ ভিতরে' বিকল্পটি নির্বাচন করুন। কীবোর্ডটি ছোঁয়ার কোনও ব্যবহারকারী ক্রিয়ায় আপনি এখন তৈরি আইবিএশনটি হুক করেছেন। যখন ব্যবহারকারী কীবোর্ডটি ট্যাপ করেন, এটি এখন লুকানো থাকবে।

(দ্রষ্টব্য: ইভেন্টটিতে ক্রিয়াটি আটকানোর জন্য, আপনি প্রাপ্ত ক্রিয়াটি সরাসরি আপনার ভিউ কন্ট্রোলার শ্রেণিবিন্যাসের ইউআইসিএন্ট্রোলের দিকেও টেনে আনতে পারেন It's এটি স্তরক্রমের 'নিয়ন্ত্রণ' হিসাবে প্রদর্শিত হয় displayed)


সমাধান এবং বিস্তারিত ব্যাখ্যার জন্য ধন্যবাদ। সত্যিই আমার জন্য সহায়ক।
ইওংজিয়াং রুয়ান

5

যদি আমি আপনাকে সঠিকভাবে পেয়েছি তবে আপনি কিবোর্ড ওয়াইলকে আউটসাইডে আলতো চাপতে দিতে চান textfieldতবে আপনার রেফারেন্স আপনার কাছে নেই textfield

এটা চেষ্টা কর;

  • গ্লোবাল টেক্সটফিল্ড নিন, এটিকে কল করুন reftextField
  • এখন textFieldDidBeginEditingসেট করে রেফারেন্সযুক্ত পাঠ্য ক্ষেত্রে

    - (void) textFieldDidBeginEditing:(UITextField *)textField{
        reftextField = textField;
    }
  • এখন আপনি আনন্দের সাথে যে কোনও বোতামের ঘড়িতে ব্যবহার করতে পারেন, (সম্পাদনা পুনরায় সংশোধন করতে স্বচ্ছ বোতাম যুক্ত করে)

    - (void)dismissKeyboard {
          [reftextField resignFirstResponder];
    }
  • বা সম্পন্ন বোতামের পদত্যাগ করার জন্য এটি চেষ্টা করে দেখুন।

    //for resigning on done button    
    - (BOOL) textFieldShouldReturn:(UITextField *)textField{
        [textField resignFirstResponder];
        return YES;
    }

3

এখানে কেবল তালিকায় যুক্ত করতে আমার বাইরের স্পর্শে কী-বোর্ড কীভাবে খারিজ করবেন তার আমার সংস্করণ dism

viewDidLoad:

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
[self.view addGestureRecognizer:singleTap];

কোথাও:

-(void)handleSingleTap:(UITapGestureRecognizer *)sender{
    [textFieldName resignFirstResponder];
    puts("Dismissed the keyboard");
}

3

UITapGestureRecognizerবিরতির UITextFieldপরিষ্কার (এক্স) বোতামটি ব্যবহার করার বিষয়ে এখানে প্রচুর দুর্দান্ত উত্তর সমাধানটি হ'ল তার প্রতিনিধিটির মাধ্যমে অঙ্গভঙ্গি সনাক্তকারীকে দমন করা:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    BOOL touchViewIsButton = [touch.view isKindOfClass:[UIButton class]];
    BOOL touchSuperviewIsTextField = [[touch.view superview] isKindOfClass:[UITextField class]];
    return !(touchViewIsButton && touchSuperviewIsTextField);
}

এটি সবচেয়ে দৃ .় সমাধান নয় তবে এটি আমার পক্ষে কাজ করে।


ঠিক একইভাবে, যদি আমি একই পাঠ্যক্ষেত্রটিতে ট্যাপ করি তবে উপরের সমস্ত বিষয় ব্যর্থ। এমনকি পদত্যাগটি আমার প্রতিক্রিয়াকারী এমনকি পদত্যাগ করে s এবং এটি টেক্সটফিল্ডের ভিতরে পরিষ্কার বোতামটি ট্যাপ করার জন্য কীবোর্ডটি বন্ধ করে দেয়
মৃগ

আমি শুধু বোতাম জন্য পরীক্ষার করছেন দ্বারা এটি প্রক্রিয়া সহজ হবে: return !touchViewIsButton। আমি অনুমান করি যে অন্য যে কোনও বোতামগুলির জন্য কীবোর্ডটি খারিজ করা উচিত তাদের ক্রিয়াকলাপে এটি করা উচিত। কীবোর্ড বরখাস্তের লেআউট পরিবর্তিত হওয়ার সাথে সাথে টাচআপস ইনসাইড কল নাও হতে পারে।
মারিওন আর্নে

3

আপনি ইউআইভিউয়ের জন্য বিভাগ তৈরি করতে পারেন এবং স্পর্শগুলি বিগান মেথোডকে নিম্নরূপে ওভাররাইড করতে পারেন।

এটি আমার পক্ষে ভাল কাজ করছে nd এবং এটি এই সমস্যার সমাধান সমাধানকে কেন্দ্রিয় করে তুলবে।

#import "UIView+Keyboard.h"
@implementation UIView(Keyboard)

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self.window endEditing:true];
    [super touchesBegan:touches withEvent:event];
}
@end

3

@ জেনসেন 2k এর উত্তরের সুইফ্ট সংস্করণ:

let gestureRecognizer : UITapGestureRecognizer = UITapGestureRecognizer.init(target: self, action: "dismissKeyboard")
self.view.addGestureRecognizer(gestureRecognizer)

func dismissKeyboard() {
    aTextField.resignFirstResponder()
}

এক রৈখিক

self.view.addTapGesture(UITapGestureRecognizer.init(target: self, action: "endEditing:"))

2

আমি আমার নতুন উন্নয়নের জন্য ব্যারি উদাহরণ ব্যবহার করেছি। এটা দুর্দান্ত কাজ! তবে আমাকে কিছুটা পরিবর্তন অন্তর্ভুক্ত করতে হয়েছিল, কেবলমাত্র পাঠ্যক্ষেত্র সম্পাদনা করার জন্য কীবোর্ড খারিজ করতে হবে।

সুতরাং, আমি ব্যারি উদাহরণে নিম্নলিখিতটি যুক্ত করেছি:

- (void) textFieldDidBeginEditing:(UITextField *)textField
{
    _textBeingEdited = textField;
}
-(void) textFieldDidEndEditing:(UITextField *)textField
{
    _textBeingEdited = nil;
}

এছাড়াও, আমি লুকানো কীবোর্ড পদ্ধতিটি নিম্নরূপে পরিবর্তন করেছি:

- (IBAction)hideKeyboard:(id)sender
{
    // Just call resignFirstResponder on all UITextFields and UITextViews in this VC
    // Why? Because it works and checking which one was last active gets messy.
    //UITextField * tf = (UITextField *) sender;
    [_textBeingEdited resignFirstResponder];
}

2

সবচেয়ে সহজ এবং সংক্ষিপ্ততম উপায়গুলির মধ্যে একটি হ'ল এই কোডটি আপনারটিতে যুক্ত করা viewDidLoad

[self.view addGestureRecognizer:[[UITapGestureRecognizer alloc]
                                     initWithTarget:self.view
                                     action:@selector(endEditing:)]];


2

আমি এখানে অনেক প্রতিক্রিয়া চেষ্টা করেছি এবং কোনও ভাগ্য হয়নি। আমার ট্যাপের অঙ্গভঙ্গি শনাক্তকারী সর্বদা আমার UIButtonsটেপ দেওয়ার সময় আমার প্রতিক্রিয়া না জানাতে বাধ্য করেছিলাম, এমনকি আমি সেট করে দিইcancelsTouchesInView অঙ্গভঙ্গি শনাক্তকারীর সম্পত্তিটি NO তে ।

শেষ পর্যন্ত এই বিষয়টিই সমাধান করেছে:

একটি আইভার আছে:

UITapGestureRecognizer *_keyboardDismissGestureRecognizer;

যখন কোনও পাঠ্য ক্ষেত্র সম্পাদনা শুরু করে, অঙ্গভঙ্গি সনাক্তকারী সেট করুন:

- (void) textFieldDidBeginEditing:(UITextField *)textField
{
    if(_keyboardDismissGestureRecognizer == nil)
    {
        _keyboardDismissGestureRecognizer = [[[UITapGestureRecognizer alloc]
                                       initWithTarget:self
                                       action:@selector(dismissKeyboard)] autorelease];
        _keyboardDismissGestureRecognizer.cancelsTouchesInView = NO;

        [self.view addGestureRecognizer:_keyboardDismissGestureRecognizer];
    }
}

তারপরে কৌশলটি আপনি কীভাবে dismissKeyboardপদ্ধতিটি সেট আপ করেন তা হল :

- (void) dismissKeyboard
{
    [self performSelector:@selector(dismissKeyboardSelector) withObject:nil afterDelay:0.01];
}

- (void) dismissKeyboardSelector
{
    [self.view endEditing:YES];

    [self.view removeGestureRecognizer:_keyboardDismissGestureRecognizer];
    _keyboardDismissGestureRecognizer = nil;
}

আমার ধারণা dismissKeyboardSelector, টাচ হ্যান্ডলিং এক্সিকিউশন স্ট্যাকের বাইরে কার্যকর করার কিছু আছে ...



1

এইটা কাজ করে

এই উদাহরণে, টেক্সটফিল্ডটি কেবলমাত্র ইউআইটিেক্সটফিল্ড ield

// YourViewController.h
// ...
@interface YourViewController : UIViewController /* some subclass of UIViewController */ <UITextFieldDelegate> // <-- add this protocol
// ...
@end

// YourViewController.m

@interface YourViewController ()
@property (nonatomic, strong, readonly) UITapGestureRecognizer *singleTapRecognizer;
@end
// ...

@implementation
@synthesize singleTapRecognizer = _singleTapRecognizer;
// ...

- (void)viewDidLoad
{
    [super viewDidLoad];
    // your other init code here
    [self.view addGestureRecognizer:self.singleTapRecognizer];

{

- (UITapGestureRecognizer *)singleTapRecognizer
{
    if (nil == _singleTapRecognizer) {
        _singleTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapToDismissKeyboard:)];
        _singleTapRecognizer.cancelsTouchesInView = NO; // absolutely required, otherwise "tap" eats events.
    }
    return _singleTapRecognizer;
}

// Something inside this VC's view was tapped (except the navbar/toolbar)
- (void)singleTapToDismissKeyboard:(UITapGestureRecognizer *)sender
{
    NSLog(@"singleTap");
    [self hideKeyboard:sender];
}

// When the "Return" key is pressed on the on-screen keyboard, hide the keyboard.
// for protocol UITextFieldDelegate
- (BOOL)textFieldShouldReturn:(UITextField*)textField
{
    NSLog(@"Return pressed");
    [self hideKeyboard:textField];
    return YES;
}

- (IBAction)hideKeyboard:(id)sender
{
    // Just call resignFirstResponder on all UITextFields and UITextViews in this VC
    // Why? Because it works and checking which one was last active gets messy.
    [aTextField resignFirstResponder];
    NSLog(@"keyboard hidden");
}

1
- (void)viewDidLoad
{
    [super viewDidLoad]; 

UITapGestureRecognizer *singleTapGestureRecognizer = [[UITapGestureRecognizer alloc]
                                                          initWithTarget:self
                                                          action:@selector(handleSingleTap:)];
    [singleTapGestureRecognizer setNumberOfTapsRequired:1];
    [singleTapGestureRecognizer requireGestureRecognizerToFail:singleTapGestureRecognizer];

    [self.view addGestureRecognizer:singleTapGestureRecognizer];
}

- (void)handleSingleTap:(UITapGestureRecognizer *)recognizer
{
    [self.view endEditing:YES];
    [textField resignFirstResponder];
    [scrollView setContentOffset:CGPointMake(0, -40) animated:YES];

}

1

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

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

1

এই ক্ষেত্রে, স্ক্রোলভিউ ব্যবহার করা যেতে পারে এবং স্ক্রোলভিউতে যুক্ত করা যেতে পারে TextFieldএবং আমি কীবোর্ডটি ScrollViewখারিজ করে দেখুন এবং তারপরে ট্যাপ করতে চাই । আমি সেক্ষেত্রে স্যাম্পল কোড তৈরি করার চেষ্টা করেছি। এটার মত,

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var scrollView: UIScrollView!
    @IBOutlet weak var textField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()

        let tapGesture = UITapGestureRecognizer(target: self, action: #selector(ViewController.tap(_:)))
        view.addGestureRecognizer(tapGesture)
        // Do any additional setup after loading the view, typically from a nib.
    }
    func tap(gesture: UITapGestureRecognizer) {
        textField.resignFirstResponder()
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

আপনার স্টোরিবোর্ডটি ঠিক ঠিক এর মতো দেখুন।

এখানে চিত্র বর্ণনা লিখুন


1

ইউআইটিেক্সটফিল্ডের বাইরে ক্লিক করে কীবোর্ড খারিজ করার জন্য আপনি ইউআইটিএপজিস্টারআরকনগনিজার পদ্ধতিটি ব্যবহার করতে পারেন। এই পদ্ধতিটি ব্যবহার করে যখনই ব্যবহারকারী ইউআইটিেক্সটফিল্ডের বাইরে ক্লিক করবেন তখন কীবোর্ড খারিজ হয়ে যাবে। নীচে এটি ব্যবহারের জন্য কোড স্নিপেট রয়েছে।

 UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]
                                   initWithTarget:self
                                   action:@selector(dismissk)];

    [self.view addGestureRecognizer:tap];


//Method
- (void) dismissk
{
    [abctextfield resignFirstResponder];
    [deftextfield resignFirstResponder];

}

1
  • পাঠ্য ক্ষেত্রের প্রতিনিধি সেট করুন দেখুন লোড হয়েছে:

    override func viewDidLoad() 
    {
      super.viewDidLoad()
      self.userText.delegate = self
    }
  • এই ফাংশন যুক্ত করুন:

    func textFieldShouldReturn(userText: UITextField!) -> Bool 
    {
     userText.resignFirstResponder()
     return true;
    }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.