কীভাবে কীওয়ার্ড আইওএস প্রোগ্রামেমেটিকভাবে রিটার্ন টিপলে বাতিল করবেন


105

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

স্টোরিবোর্ডগুলির সাহায্যে এবং UITextFieldসম্পত্তি হিসাবে না তৈরি করে সরাসরি বস্তুটি বরাদ্দ ও প্রারম্ভিক করে কীভাবে এটি করা যায় তা আমি দেখেছি । সম্ভব কি?

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UITextFieldDelegate>

@property (strong, atomic) UITextField *username;

@end

.m

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    // Do any additional setup after loading the view, typically from a nib.
    
    self.view.backgroundColor = [UIColor blueColor];
    self.username = [[UITextField alloc] initWithFrame:CGRectMake(100, 25, 80, 20)];
    self.username.placeholder = @"Enter your username";
    self.username.backgroundColor = [UIColor whiteColor];
    self.username.borderStyle = UITextBorderStyleRoundedRect;
    if (self.username.placeholder != nil) {
        self.username.clearsOnBeginEditing = NO;
    }
    _username.delegate = self; 
    
    [self.view addSubview:self.username];
    [_username resignFirstResponder];
    
}

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

@end

উত্তর:


265

সহজ উপায় হ'ল প্রতিনিধিদের UITextFieldসাথে স্ব সংযুক্ত হওয়া ( self.mytestField.delegate = self) textFieldShouldReturnব্যবহার করে পদ্ধতিটিতে কীবোর্ডকে বরখাস্ত করা[textField resignFirstResponder];

কীবোর্ড খারিজ করার আরেকটি উপায় নিম্নলিখিত:

[self.view endEditing:YES];

[self.view endEditing:YES];যেখানে আপনি কীবোর্ড (বাটন ইভেন্ট, টাচ ইভেন্ট ইত্যাদি) খারিজ করতে চান সেখানে রাখুন ।


আমি যখন প্রতিনিধিকে সংযুক্ত করি তখন আমি সতর্কতা এবং / অথবা ত্রুটিগুলি পাই। আমি আগে আপনার উপায়টি দেখেছি, তবে কোনও কারণে এটি কাজ করতে পারে না these এই পদ্ধতিগুলি কি ডিলডোডে যেতে হবে?
noobsmcgoobs

1
আপনি যখন টেক্সটফিল্ডের প্রতিনিধিটিকে নিজের কাছে সেট করার চেষ্টা করার সময় ত্রুটিটি পেয়ে যাচ্ছিলেন, তবে আপনি সম্ভবত ক্লাস সংজ্ঞায় ইউআইটিেক্সটফিল্ডডেলিগেট যুক্ত করেন নি। বিশেষত ... শ্রেণি ভিউ কন্ট্রোলার: ইউআইভিউকন্ট্রোলার, ইউআইটিেক্সটফিল্ডডেলিগেট {...
টিমউইটিং

29

এটির UITextFieldমতো প্রতিনিধি পদ্ধতি যুক্ত করুন :

@interface MyController : UIViewController <UITextFieldDelegate>

এবং textField.delegate = self;এরপরে আপনার দুটি সেট প্রতিনিধি পদ্ধতি যুক্ত করুন setUITextField

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

// It is important for you to hide the keyboard
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
    return YES;
}

আমাদের যুক্ত করা উচিত, যে উপরেরগুলি কেবলমাত্র কাজ করে, যদি আপনার কন্ট্রোলার ইউআইটিেক্সটফিল্ডডেলিগেটটি এভাবে প্রয়োগ করে: @interface MyController : UIViewController <UITextFieldDelegate>
ডেরউইক

@ আইপ্যাটেল আমি সেই দুটি পদ্ধতি রেখেছি এবং নিজেইডিউজারনেম.ডিলেগেট = স্ব এবং [স্ব-ব্যবহারকারীর পদত্যাগপত্রে ফার্স্ট রিসপন্ডার] ভিডিডলয়েডে যুক্ত করেছি। এটি আমার প্রয়োজন দুটি দৃশ্যের জন্য কাজ করে। এটি কি স্বাভাবিক বা আমি খুব বেশি কোড ব্যবহার করছি?
noobsmcgoobs


24

কীবোর্ড খারিজ করতে কেবল এটিকে দ্রুত ব্যবহার করুন:

UIApplication.sharedApplication().sendAction("resignFirstResponder", to:nil, from:nil, forEvent:nil)

সুইফট 3

UIApplication.shared.sendAction(#selector(UIResponder.resign‌​FirstResponder), to: nil, from: nil, for: nil)

সুইফট 3UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
মিফ

17

সুইফট 4:

self.view.endEditing(true)

অথবা

বর্তমান ভিউকন্ট্রোলারের কাছে পাঠ্য ক্ষেত্রের প্রতিনিধি সেট করুন এবং তারপরে:

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

    textField.resignFirstResponder()

    return true

}

উদ্দেশ্য গ:

[self.view endEditing:YES];

অথবা

বর্তমান ভিউকন্ট্রোলারের কাছে পাঠ্য ক্ষেত্রের প্রতিনিধি সেট করুন এবং তারপরে:

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

    return YES;
}

9

অ্যাপ ডেলিগেটে আপনি লিখতে পারেন

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

এইভাবে ব্যবহার করুন, আপনি খুব বেশি কোড লিখতে পারবেন না।


7

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

[textField resignFirstResponder];

এবং এর রিটার্ন বোতামে কীবোর্ডটি আড়াল করার জন্য আপনাকে এর প্রতিনিধি পদ্ধতিটি প্রয়োগ করতে হবে textFieldShouldReturn:এবং resignFirstResponderবার্তাটি পাস করতে হবে ।

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

7

আমি আমার কোডে যা ব্যবহার করি তা এখানে। এটি যাদুমন্ত্রের মত কাজ করে!

আপনার ভিউ কন্ট্রোল.আর যোগ করুন:

@property (nonatomic) UITapGestureRecognizer *tapRecognizer;

এখন .m ফাইলে এটি আপনার ভিউডিডলড ফাংশনে যুক্ত করুন:

- (void)viewDidLoad {
    [super viewDidLoad];

    //Keyboard stuff
    tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
    tapRecognizer.cancelsTouchesInView = NO;
    [self.view addGestureRecognizer:tapRecognizer];
}

এছাড়াও, .m ফাইলে এই ফাংশনটি যুক্ত করুন:

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

1
কেবল ক্রিয়াটি মনে রাখবেন: @ নির্বাচককে একই পদ্ধতির নামটি কল করতে হবে যেখানে আপনি শেষ করছেন সম্পাদনা: হ্যাঁ, এই ক্ষেত্রে "হ্যান্ডেলসিংট্যাপ:"
মার্কোস রেবুচাস

4

কীবোর্ড পপ আপ হওয়ার পরে কোনও কীবোর্ড খারিজ করতে, এখানে 2 টি মামলা রয়েছে ,

  1. যখন ইউআইটিসেক্সটফিল্ডটি কোনও ইউআইএসক্রোলভিউয়ের মধ্যে থাকে

  2. যখন ইউআইটিেক্সটফিল্ডটি কোনও ইউআইএসক্রোলভিউয়ের বাইরে থাকে

2. যখন UITextFeld আপনার ইউআইভিউকন্ট্রোলার সাবক্লাসে কোনও ইউআইএসক্রোলভিউয়ের পদ্ধতির ওভাররাইড করে

আপনাকে অবশ্যই সমস্ত ইউআইটিেক্সটভিউয়ের জন্য প্রতিনিধি যুক্ত করতে হবে

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self.view endEditing:YES];
}
  1. একটি স্ক্রোল দৃশ্যে, বাইরে টোকা দেওয়া কোনও ঘটনাই চালিত করবে না , তাই সেক্ষেত্রে একটি ট্যাপ গ্যাশার রিকগনিাইজার ব্যবহার করুন, স্ক্রোল ভিউয়ের জন্য একটি ইউআইটিপজেষ্টারটি টেনে আনুন এবং এর জন্য একটি আইবিএક્શન তৈরি করুন

আইবিএএকশন তৈরি করতে, সিটিআরএল + টিপুন ইউআইটিএপপেশারটি ক্লিক করুন এবং এটিকে ভিউকন্ট্রোলারের .h ফাইলটিতে টানুন।

এখানে আমি আমার ক্রিয়া নাম হিসাবে ট্যাপড এভেন্ট নামকরণ করেছি

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

প্রদত্ত অপ্রয়োজনীয় তথ্য নীচের লিঙ্ক থেকে উদ্ভূত হয়েছে, দয়া করে আরও তথ্যের জন্য উল্লেখ করুন বা যদি আপনি অবর্ণনীয় ডেটা বুঝতে না চান তবে আমার সাথে যোগাযোগ করুন।

http://samwize.com/2014/03/27/dismiss-keyboard-when-tap-outside-a-uitextfield-slash-uitextview/


ধন্যবাদ। আপনার উত্তর আমাকে সাহায্য করেছে ..!
আর্কিট কাপুর

4

UITextViewএর ভিতরে একটি গ্রুপের জন্য ViewController:

সুইফট 3.0

for view in view.subviews {
    if view is UITextField {
        view.resignFirstResponder()
    }
}

উদ্দেশ্য গ

// hide keyboard before dismiss
for (UIView *view in [self.view subviews]) {
    if ([view isKindOfClass:[UITextField class]]) {
        // no need to cast
        [view resignFirstResponder];
    }
}

3

আমি জানি এটির উত্তর অন্যদের দ্বারা দেওয়া হয়েছে, তবে আমি অন্য একটি নিবন্ধ পেয়েছি যা কোনও পটভূমি ইভেন্ট - টেবিলভিউ বা স্ক্রোলভিউয়ের জন্যও কভার করা হয়নি।

http://samwize.com/2014/03/27/dismiss-keyboard-when-tap-outside-a-uitextfield-slash-uitextview/


3

যেহেতু ট্যাগগুলি কেবল আইওএস বলে আমি আমি উত্তরটি সুইফট ১.২ এবং আইওএস ৮.৪ এর জন্য পোস্ট করবো, এগুলি আপনার ভিউ কন্ট্রোলার সুইফ্ট শ্রেণিতে যুক্ত করুন:

// MARK: - Close keyboard when touching somewhere else
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {

    self.view.endEditing(true)

}

// MARK: - Close keyboard when return pressed
func textFieldShouldReturn(textField: UITextField!) -> Bool {

    textField.resignFirstResponder()

    return true
}
// MARK: -

ক্লাস ঘোষণায় UITextFieldDelegate যুক্ত করতে ভুলবেন না এবং আপনার পাঠ্য ক্ষেত্রগুলিকে স্ব (দর্শন) হিসাবে প্রতিনিধি সেট করুন।


3

সুইফটে 3

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

অথবা

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        if textField == yourtextfieldName
        {
            self.resignFirstResponder()
            self.view.endEditing(true)
        }
    }

2

ব্যাকগ্রাউন্ড বা ফিরে আসার পরে এটিকে খারিজ করতে আমি এখানে যা করেছি তা এখানে। আমাকে ভিডিডলিডে প্রতিনিধি = স্ব যোগ করতে হয়েছিল এবং পরে .m ফাইলগুলিতে প্রতিনিধি পদ্ধতিগুলিও যুক্ত করতে হয়েছিল।

.h
#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UITextFieldDelegate>


@property (strong, atomic) UITextField *username;

@end

.m
- (void)viewDidLoad
{
    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    self.view.backgroundColor = [UIColor blueColor];
    self.username = [[UITextField alloc] initWithFrame:CGRectMake(100, 25, 80, 20)];
    self.username.placeholder = @"Enter your username";
    self.username.backgroundColor = [UIColor whiteColor];
    self.username.borderStyle = UITextBorderStyleRoundedRect;
    if (self.username.placeholder != nil) {
        self.username.clearsOnBeginEditing = NO;
    }
    self.username.delegate = self;
    [self.username resignFirstResponder];
    [self.view addSubview:self.username];


}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


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



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

@end

2

কীবোর্ড খারিজ করার জন্য এটি কেবল উদ্দেশ্য-সিতে ব্যবহার করুন:

[[UIApplication sharedApplication].keyWindow endEditing:YES];

1

প্রথমে আপনাকে .h ফাইলে টেক্সটফিল্ড ডিজেলেট যুক্ত করতে হবে। যদি না (BOOL)textFieldShouldReturn:(UITextField *)textFieldএই পদ্ধতির নাম না বলে ঘোষণা না করে তবে প্রথমে প্রতিনিধি যুক্ত করুন এবং সেই পদ্ধতিতে কীবোর্ড হাইড কোড লিখুন।

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

আর একবার চেষ্টা কর..


0

ডেলিগেট যুক্ত করুন: UITextFieldDelegate

@interface ViewController : UIViewController <UITextFieldDelegate>

এবং তারপরে এই প্রতিনিধি পদ্ধতিটি যুক্ত করুন

// এটি নিখুঁতভাবে কাজ করা উচিত

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

0
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self.view.subviews enumerateObjectsUsingBlock:^(UIView* obj, NSUInteger idx, BOOL *stop) {
    if ([obj isKindOfClass:[UITextField class]]) {
        [obj resignFirstResponder];
    }
}];
}

আপনি যখন স্ক্রিনে আরও একটি টেক্সটফিল্ড ব্যবহার করেন তখন এই পদ্ধতিটির সাথে আপনার প্রতিবারের মতো টেক্সটফিল্ডের উল্লেখ করার দরকার নেই

[textField1 resignFirstResponder];
[textField2 resignFirstResponder];

0

সুইফট 2:

প্রতিটি কাজ করার জন্য এটি করা হয়!

Doneবোতামের সাহায্যে কীবোর্ডটি বন্ধ করুন বা Touch outSide, Nextপরবর্তী ইনপুটটিতে যেতে।

স্টোরিবোর্ডে Return Keyটেক্সট ফাইল করা প্রথম পরিবর্তন Next

override func viewDidLoad() {
  txtBillIdentifier.delegate = self
  txtBillIdentifier.tag = 1
  txtPayIdentifier.delegate  = self
  txtPayIdentifier.tag  = 2

  let tap = UITapGestureRecognizer(target: self, action: "onTouchGesture")
  self.view.addGestureRecognizer(tap)

}

func textFieldShouldReturn(textField: UITextField) -> Bool {
   if(textField.returnKeyType == UIReturnKeyType.Default) {
       if let next = textField.superview?.viewWithTag(textField.tag+1) as? UITextField {
           next.becomeFirstResponder()
           return false
       }
   }
   textField.resignFirstResponder()
   return false
}

func onTouchGesture(){
    self.view.endEditing(true)
}

0

আপনি যদি বর্তমান ভিউ কন্ট্রোলার বা পাঠ্যদর্শনটি না জানেন তবে আপনি প্রতিক্রিয়াশীল চেইনটি ব্যবহার করতে পারেন:

UIApplication.shared.sendAction(#selector(UIView.endEditing(_:)), to:nil, from:nil, for:nil)

0

দ্রুতগতির জন্য 3-4 আমি ঠিক করেছি

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
    return false
}

ক্লাসে যে কোনও জায়গায় কপি পেস্ট করুন। আপনি যদি সমস্ত ইউআইটেক্সটফিল্ড একইরূপে কাজ করতে চান বা আপনার যদি একটি মাত্র থাকে তবে এই সমাধানটি কেবলমাত্র কার্যকর হবে!

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