কীবোর্ড খারিজ করার সহজ উপায়?


376

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


: এই প্রশ্নের চমৎকার সম্পূরক stackoverflow.com/questions/1490573/...
ericsoco

নীচের সমস্ত উত্তর একটি সতর্কতা। আপনি কেবি পদত্যাগ করার ঠিক পরে যদি কোনও সেগমেন্ট করেন তবে কেবি অনাথ হন এবং তাকে বরখাস্ত করা যায় না। পাঠ্যফিল্ডশোল্ডার্টર્ન পদ্ধতিতে আপনাকে কেবি খারিজ করতে হবে।
gjpc

26
গ্লোবাল কীবোর্ড সঠিকভাবে বরখাস্ত:[[[UIApplication sharedApplication] keyWindow] endEditing:YES];
ইয়র্ক

আমি এই ভিডিওটি খুঁজে পেয়েছি গোলাপীস্টোন.কম । হতে পারে এটি অন্যকে সাহায্য করতে পারে।
উত্সাহী

উত্তর:


796

চেষ্টা করুন:

[self.view endEditing:YES];

1
এটি কাজ করে বলে মনে হচ্ছে (ios4.1 এ পরীক্ষিত)। যদিও এটি কেবলমাত্র আইওএসে পাওয়া যায় 3.2 wardsর্ধ্বমুখী। আমি নিশ্চিত নই যে এটি আসলে কাজ করার গ্যারান্টিযুক্ত কিনা, বা এটি কোনও কাজের জন্য নথিভুক্ত নয় এমনভাবে একটি এপিআই কল করা থেকে কেবল একটি গ্যারান্টিযুক্ত পার্শ্ব প্রতিক্রিয়া।
জোসেফ এইচ

3
এটি আমার পক্ষে নিখুঁতভাবে কাজ করেছিল এবং অবশ্যই এই প্রশ্নের উত্তরগুলির কয়েকটি থেকে ভাল। দস্তাবেজগুলি বলে যে এটি আইওএস ২.০ এবং তারপরে পাওয়া যায়।
antsyawn

8
ডকুমেন্টেশন যেমন বলে: "এই পদ্ধতিটি বর্তমানে প্রথম প্রতিক্রিয়াশীল এমন পাঠ্যক্ষেত্রের জন্য বর্তমান দৃশ্য এবং এর সংক্ষিপ্ত চিত্রক্রমের দিকে নজর রাখে it এটি যদি খুঁজে পায় তবে এটি পাঠ্য ক্ষেত্রটিকে প্রথম প্রতিক্রিয়াকারী হিসাবে পদত্যাগ করতে বলে If যদি বলের পরামিতি সেট করা থাকে হ্যাঁ, পাঠ্য ক্ষেত্রটি কখনও জিজ্ঞাসা করা হয় না; এটি পদত্যাগ করতে বাধ্য হয় "" - সুতরাং এটি আইএমও হ'ল আসল প্রশ্নের সঠিক উত্তর (ব্যবহারের ক্ষেত্রে: আমার কয়েক মিলিয়ন ক্ষেত্র রয়েছে well
জোশিস

14
উত্তরটি ভুল না হলেও কিছুটা ভুল, আসলে এটি হওয়া উচিত: [self.view endEditing:YES];যেহেতু BOOL মানগুলি উদ্দেশ্য-সি তে হ্যাঁ / না।
ক্রিসবেন

24
ক্রিসবেন: আপনি হ্যাঁ / না, সত্য / মিথ্যা, 0/1 ব্যবহার করতে পারেন।
মাইকেল সুপারসার্জনস্কি

126

আপনি বর্তমানে সম্পাদনা দর্শনটিকে তার প্রথম প্রতিক্রিয়াশীল স্থিতির সাথে পদত্যাগ করতে বাধ্য করতে পারেন [view endEditing:YES]। এটি কীবোর্ডটি আড়াল করে।

বিপরীতে -[UIResponder resignFirstResponder], -[UIView endEditing:]বর্তমান প্রথম প্রতিক্রিয়াকারীকে সন্ধানের জন্য পর্যালোচনাগুলির মাধ্যমে অনুসন্ধান করবে। সুতরাং আপনি এটিকে আপনার শীর্ষ-স্তরের ভিউতে প্রেরণ করতে পারেন (উদাহরণস্বরূপ self.viewUIViewController) এবং এটি সঠিক কাজ করবে।

(এই উত্তরে এর আগে আরও কয়েকটি সমাধান অন্তর্ভুক্ত ছিল, যা কাজ করেছিল তবে প্রয়োজনীয়গুলির চেয়ে জটিল ছিল confusion আমি বিভ্রান্তি এড়াতে এগুলি সরিয়ে দিয়েছি))


তবে এটি কেবল উপাদানটিকে ফার্স্ট রিসপন্ডার হতে আটকাবে, কোনও উপাদান থেকে বর্তমান ফার্স্ট রিসপন্ডার স্থিতিটি সরিয়ে দেবে না।
কেন্ডল হেলস্টেটার জেলনার

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

+1 হয়ে উঠুন ফার্স্ট রিসপন্ডারটি অন্যান্য ইউআইটিেক্সটফিল্ডগুলিতে ট্যাপ নিয়ে যা সমস্যা ছিল তা সমাধান করেছে।
জেসন জর্জ

3
এটি অচল। [self.view endEditing:YES];উত্তর উত্তম।
ftvs

1
এটি অপ্রচলিত নয়, এই উত্তরটি ঠিক কীভাবে [UIView endediting:]কাজ করে তা ব্যাখ্যা করে। আমি যে অ্যাপ্লিকেশনগুলি তৈরি করেছি তার একটিতে, ইউআইএনএভিগেশনভিউ কনট্রোলারটিতে একটি অনুসন্ধান বাক্স যুক্ত করা হয়েছিল, যদি আপনি কেবল নিজের ভিউ কন্ট্রোলার [self.view endEditing:YES]হিসাবে কল করেন তবে এটি কার্যকর selfহবে না, পরিবর্তে, আমি এই পদ্ধতিটি সরাসরি দেখার সুযোগে যেখানে ফোনটি যুক্ত করা হয়েছিল সেখানে ডেকেছি, উদাহরণস্বরূপ: [self.mySearchBoxView endEditing:YES]
জানু Cássio

92

আপনি অ্যাপ্লিকেশনটিতে একটি শূন্য লক্ষ্যবস্তু পদক্ষেপ প্রেরণ করতে পারেন, বর্তমানে কোন দর্শনটিতে প্রথম প্রতিক্রিয়াশীল স্থিতি রয়েছে তা নিয়ে চিন্তা না করে যে কোনও সময় প্রথম প্রতিক্রিয়াশীলকে পদত্যাগ করা হবে।

উদ্দেশ্য গ:

[[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];

সুইফট 3.0:

UIApplication.shared.sendAction(#selector(resignFirstResponder), to: nil, from: nil, for: nil)

মেনু কমান্ডগুলির জন্য ম্যাক ওএস এক্সে নিল লক্ষ্যযুক্ত ক্রিয়াগুলি সাধারণ এবং আইওএস-এ তাদের ব্যবহারের জন্য এখানে।


14
পুরো পৃষ্ঠার সেরা সমাধান।
লিও নাটান

আইওএস অ্যাপের যে কোনও জায়গা থেকে কীবোর্ডকে পরিত্রাণ পাওয়ার জন্য সর্বোত্তম উপায় the
বেন সিনক্লেয়ার

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

1
এখনও আইওএসে কাজ করে 9. বিশ্বব্যাপী একটি পাঠ্যক্ষেত্রের ফোকাসকে ইস্তফা দেওয়ার এবং কীবোর্ড খারিজ করার দুর্দান্ত উপায়।
বিএমজনস

এবং এই নির্দিষ্ট মন্তব্যের ধারা অব্যাহত রাখতে .... এখনও আইওএসে কাজ করে 10 :-)
ম্যান ট্র্যাভেল

56

সত্যি কথা বলতে, আমি এখানে প্রস্তাবিত কোনও সমাধান সম্পর্কে পাগল নই। আমি একটি TapGestureR সনাক্তকারী ব্যবহার করার একটি দুর্দান্ত উপায় খুঁজে পেয়েছি যা আমি মনে করি আপনার সমস্যার কেন্দ্রবিন্দুতে পৌঁছেছে: আপনি কীবোর্ড ছাড়াও যে কোনও কিছুতে ক্লিক করেন, কীবোর্ডটি খারিজ করে দিন।

  1. ViewDidLoad এ, কীবোর্ড বিজ্ঞপ্তিগুলি পেতে রেজিস্টার করুন এবং একটি UITapGestureRecognizer তৈরি করুন:

    NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
    
    [nc addObserver:self selector:@selector(keyboardWillShow:) name:
    UIKeyboardWillShowNotification object:nil];
    
    [nc addObserver:self selector:@selector(keyboardWillHide:) name:
    UIKeyboardWillHideNotification object:nil];
    
    tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self
    action:@selector(didTapAnywhere:)];
  2. কীবোর্ড শো / লুকানো প্রতিক্রিয়া যুক্ত করুন। সেখানে আপনি ইউআইভিউতে টেপগাস্টারআরকনাইজারটি যুক্ত এবং সরিয়ে ফেলেন যা টেপ করা অবস্থায় কীবোর্ডটি বরখাস্ত করা উচিত। দ্রষ্টব্য: আপনাকে এটিকে সমস্ত উপ-দর্শন বা নিয়ন্ত্রণগুলিতে যুক্ত করতে হবে না।

    -(void) keyboardWillShow:(NSNotification *) note {
        [self.view addGestureRecognizer:tapRecognizer];
    }
    
    -(void) keyboardWillHide:(NSNotification *) note
    {
        [self.view removeGestureRecognizer:tapRecognizer];
    }
  3. যখন টেপটি আসে তখন টেপগাস্টারআরকনাইটিজার আপনার ফাংশনটিকে কল করবে এবং আপনি কীবোর্ডটি এভাবে খারিজ করতে পারবেন:

    -(void)didTapAnywhere: (UITapGestureRecognizer*) recognizer {    
        [textField resignFirstResponder];
    }

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


আমার @ কার্যকরকরণে আমি @ প্রপার্টি যুক্ত করলাম (নির্ধারিত) ইউআইটিএপজিস্টচারআরকনাইজার * ট্যাপরোকনাইজার; এবং পরিবর্তিত স্ব.টাপআরকগনাইজার = [[ইউআইটিএপজেস্টারআরকগনাইজার বরাদ্দ] initWithTarget: স্ব-ক্রিয়া: @ নির্বাচক (didTapAnywhere :)];
অধ্যাপক টড

আমি একই জিনিস করার চেষ্টা করছি, এবং আমি কলটিতে কলব্যাক পাচ্ছি না। কৌতূহলী: আপনার সম্পত্তি 'বরাদ্দ' কেন?
তাহো ওয়ালভারাইন

প্লাস ওয়ান এবং তদতিরিক্ত, এটি ডিফল্ট iOS আচরণ হওয়া উচিত। অথবা একটি বরখাস্ত বোতাম টগল করার জন্য কমপক্ষে একটি সহজ উপায় যুক্ত করুন।
শাওন্টি ফন্ড্রিসি

24

এই কীবোর্ডটি দূরে যেতে যখন আঘাত করতে একটি সমাধান পাওয়া যাবে returnকোন পাঠ্যক্ষেত্র এক জায়গায় কোড যোগ করে (তাই প্রতিটি পাঠ্যক্ষেত্র জন্য একটি হ্যান্ডলার যোগ করতে হবে না):


এই পরিস্থিতিতে বিবেচনা করুন:

আমার viewcontrollerদুটি পাঠ্যক্ষেত্র রয়েছে (ব্যবহারকারীর নাম এবং পাসওয়ার্ড)। এবং viewcontrollerপ্রয়োগ UITextFieldDelegateপ্রোটোকল

আমি ভিউডিডলয়েডে এটি করি

- (void)viewDidLoad 
{
    [super viewDidLoad];

    username.delegate = self;
    password.delegate = self;
}

এবং ভিউকন্ট্রোলার হিসাবে theচ্ছিক পদ্ধতি প্রয়োগ করে

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

এবং আপনি যে পাঠ্যক্ষেত্রই থাকুন না কেন, আমি returnকীবোর্ডটিতে হিট করার সাথে সাথে তা খারিজ হয়ে যায়!

আপনার ক্ষেত্রে, আপনি যতক্ষণ না পাঠ্যক্ষেত্রের সমস্ত প্রতিনিধিকে স্ব এবং বাস্তবায়নের জন্য সেট করেছেন ততক্ষণ এটি কাজ করবে textFieldShouldReturn


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

1
এমন কিছু ক্ষেত্রে রয়েছে যখন আপনি "রিটার্ন" না দিয়ে কীবোর্ডটি বরখাস্ত করতে চাইতে পারেন, উদাহরণস্বরূপ যখন সাইডবার মেনু প্রদর্শিত হতে চলেছে
পিটার জনসন

এই উত্তরটি কেবলমাত্র সেই পরিস্থিতিতে প্রাসঙ্গিক যেখানে স্পষ্ট করেই সম্পাদনা করা হয়েছে যেখানে "রিটার্ন" হিট করা একটি গ্রহণযোগ্য সমাধান। [আমার ক্ষেত্রে, ক্ষেত্রের বাইরে ব্যবহারকারীর ট্যাপগুলি সম্পাদনা করার সময় আমি কীবোর্ডটি বরখাস্ত করতে চেয়েছিলাম; এই উত্তরটি এতে কোনও সাহায্য করে না]]
টুলমেকারস্টেভ

14

আরও ভাল পন্থা হ'ল কিছু "চুরি" প্রথম প্রতিক্রিয়াশীল স্থিতি।

যেহেতু ইউআইএপ্লিকেশন হ'ল ইউআইআরএসপেন্ডারের একটি সাবক্লাস, আপনি চেষ্টা করতে পারেন:

[[UIApplication sharedApplication] becomeFirstResponder]
[[UIApplication sharedApplication] resignFirstResponder]

এটি ব্যর্থ হয়ে শূন্য আকারের ফ্রেম সহ একটি নতুন ইউআইটিেক্সটফিল্ড তৈরি করুন, এটিকে কোথাও দেখার জন্য যুক্ত করুন এবং অনুরূপ কিছু করুন (পদত্যাগের পরে করুন) become


1
ইউআইএপ্লিকেশন ট্রিক কাজ করে না (এটি ক্র্যাশ করে, কমপক্ষে সিমুলেটারে) তবে আপনার কোনও শূন্য আকারের ইউআইটিেক্সটফিল্ডের দরকার নেই - কেবল কোনও এলোমেলো ক্ষেত্র বেছে নিন এবং এটি দিয়ে এটি করুন। এনএসআরসপন্ডার-এর ফার্স্ট রেসপন্ডার হ'ল একটি বিজ্ঞপ্তি কেবলমাত্র পদ্ধতি, তবুও ইউআইআরআইএসপন্ডার এটি নয় (নকশাটি আরও খারাপ, আসলে)।
নিকোলাস রিলে

1
আহা, ধন্যবাদ! এটি ইউআইএ অ্যাপ্লিকেশন এ কল করে ক্রাশ হয় তবে শূন্য আকারের ইউআইটিেক্সটফিল্ড দুর্দান্ত কাজ করে এবং আমার আগের কোনও ক্ষেত্র পুনরুদ্ধার করতে হবে না।
সেভেন্টো

এর জন্য যদি কোনও অফিসিয়াল, পুরোপুরি ভাল এবং ডকুমেন্টেড পদ্ধতি থাকে তবে কেন কেউ এটি করবে?
ম্যাকিয়েজ সুইচ

2
তারা না, ভাল সমাধানের জন্য সর্বাধিক উত্সাহিত উত্তর দেখুন। এটি তখন ভালভাবে জানা ছিল না (আমার উত্তর ছিল ২০০৯, অন্য উত্তরটি এক বছরেরও বেশি পরে ২০১০ সালে এসেছিল)। তবে আমি এটি উত্তরোত্তর জন্য রেখেছি।
কেন্ডাল হেলস্টেটার জেলনার

8

কিছু ইউটিলিটি শ্রেণিতে এটিকে দূরে সরিয়ে নিন।

+ (void)dismissKeyboard {
    [self globalResignFirstResponder];
}

+ (void) globalResignFirstResponder {
    UIWindow * window = [[UIApplication sharedApplication] keyWindow];
    for (UIView * view in [window subviews]){
        [self globalResignFirstResponderRec:view];
    }
}

+ (void) globalResignFirstResponderRec:(UIView*) view {
    if ([view respondsToSelector:@selector(resignFirstResponder)]){
        [view resignFirstResponder];
    }
    for (UIView * subview in [view subviews]){
        [self globalResignFirstResponderRec:subview];
    }
}

1
এই আমি কি খুঁজছিলাম!
অ্যাসিলেবাঞ্চি

নিখুঁত, আপনার গ্লোবাল ডিজাইন ফার্স্ট রিস্পন্ডারআরেক পদ্ধতির মোটেই প্রয়োজন নেই, কেবল পরিবর্তে [দেখুন এডিটিং দেখুন: হ্যাঁ]। এটি একই জিনিস করে।
n13

হ্যাঁ! চূড়ান্ত সমাধান! আমি অনেক উপায়ে চেষ্টা করেছি, কেবলমাত্র এটিই আমার পক্ষে কাজ করে! আপনাকে অনেক ধন্যবাদ!
ডুইউ

6

@ নিকোলাস রিলি এবং @ কেন্ডাল হেলস্টেটার জেলেন এবং @ ক্যাননিবয়:

একদম অসাধারণ!

ধন্যবাদ.

এই থ্রেডে আপনার পরামর্শ এবং অন্যের পরামর্শ বিবেচনা করে আমি এটি করেছি:

এটি যখন ব্যবহার করা হয় তখন কেমন লাগে:

[[self appDelegate] dismissKeyboard]; (দ্রষ্টব্য: আমি এনএসবজেক্টের যোগ হিসাবে অ্যাপডেলিগেট যুক্ত করেছি যাতে আমি যে কোনও জায়গায় যে কোনও জায়গায় ব্যবহার করতে পারি)

এটি হুডের নীচে দেখতে কেমন দেখাচ্ছে:

- (void)dismissKeyboard 
{
    UITextField *tempTextField = [[[UITextField alloc] initWithFrame:CGRectZero] autorelease];
    tempTextField.enabled = NO;
    [myRootViewController.view addSubview:tempTextField];
    [tempTextField becomeFirstResponder];
    [tempTextField resignFirstResponder];
    [tempTextField removeFromSuperview];
}

সম্পাদনা

আমার উত্তর সংশোধন অন্তর্ভুক্ত tempTextField.enabled = NO;। পাঠ্য ক্ষেত্রটি অক্ষম করা UIKeyboardWillShowNotificationএবং UIKeyboardWillHideNotificationকীবোর্ড বিজ্ঞপ্তিগুলি প্রেরণ করা থেকে বাধা দেওয়া হবে আপনি যদি আপনার অ্যাপ্লিকেশন জুড়ে এই বিজ্ঞপ্তিগুলির উপর নির্ভর করেন।


আমি জানি না এটি কাজ করে কিনা, তবে এটি একটি স্মার্ট এবং সহজ উপায় বলে মনে হচ্ছে।
দৈত্য

5

কোনও ইউআইটিেক্সটফিল্ড বা কীবোর্ডের বাইরের স্ক্রিনে যে কোনও জায়গায় স্পর্শ করলে আইওএস-এ কী-বোর্ড কীভাবে বরখাস্ত করা যায় তার দ্রুত পরামর্শ। আইওএস কীবোর্ড কত রিয়েল এস্টেট গ্রহণ করতে পারে তা বিবেচনা করে, আপনার ব্যবহারকারীদের কীবোর্ডটি খারিজ করার জন্য একটি সহজ এবং স্বজ্ঞাত উপায় বলে বোধ করা যায়।

এখানে একটি লিঙ্ক


গ্রেট! AppDelegate এ যুক্ত করে এটি সমস্ত সম্পর্কিত দর্শনগুলির জন্য কাজ করে।
জিউলং ঝাও

5

এখানে প্রচুর পরিমাণে জটিল উত্তর, সম্ভবত এটি আইওএস ডকুমেন্টেশনে পাওয়া সহজ নয়। জোসেফএইচ এর ঠিক উপরে ছিল:

[[view window] endEditing:YES];

4

এমনকি ম্যাগারের উত্তর চেয়ে সহজ Simp

ঊর্ধ্বলিপি touchesBegan:withEvent:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [textField resignFirstResponder];`
}

এটি dismiss the keyboardযখন আপনি কোথাও স্পর্শ করবেন background


3

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

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

@property (nonatomic) UITapGestureRecognizer *tapRecognizer;

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

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

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

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

ধন্যবাদ! কিন্তু আপনি 'handleSingleTap' থেকে 'didTapAnywhere' বা অঙ্গভঙ্গি শনাক্তকারী ;-) ফাংশন নামান্তর উচিত
Matthijs

2

আপনার দর্শনে নিয়ামকের শিরোনাম ফাইলটি <UITextFieldDelegate>আপনার নিয়ামকের ইন্টারফেসের সংজ্ঞা যুক্ত করে যাতে এটি ইউআইটিেক্সটফিল্ড প্রতিনিধি প্রোটোকলের সাথে খাপ খায় ...

@interface someViewController : UIViewController <UITextFieldDelegate>

... নিয়ন্ত্রকের প্রয়োগকারী ফাইলটিতে (। মি) নিম্নলিখিত পদ্ধতিটি বা এর ভিতরে কোড যুক্ত করুন যদি আপনার ইতিমধ্যে একটি ভিডিডিল্ড পদ্ধতি থাকে ...

- (void)viewDidLoad
{
    // Do any additional setup after loading the view, typically from a nib.
    self.yourTextBox.delegate = self;
}

... তারপরে আপনার টেক্সটবক্সকে আপনার আসল পাঠ্য ক্ষেত্রে যুক্ত করুন

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField 
{
    if (theTextField == yourTextBox) {
        [theTextField resignFirstResponder];
    }
    return YES;
}

2

আপনার endEditing:কার্যকরী উইন্ডোটির সাবক্লাস হওয়া উচিতUIView

[[UIApplication sharedApplication].windows.firstObject endEditing:NO];

আমি আপনার পরিবর্তে হ্যাঁ বলতে চেয়েছি)
মাতরোসভ আলেকজান্ডার

2

ইউআইটিএবলভিউ এবং ইউআইএসক্রোলভিউ থেকে কীবোর্ড খারিজ করার সর্বোত্তম উপায় হ'ল:

tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag

2

সুইফ্ট 3 এ আপনি নিম্নলিখিতগুলি করতে পারেন

UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)

1

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

 // dismiss keyboard (mostly macro)
[[UIApplication sharedApplication].delegate dismissKeyboard]; // call this in your to app dismiss the keybaord

// --- dismiss keyboard (in indexAppDelegate.h) (mostly macro)
- (void)dismissKeyboard;

// --- dismiss keyboard (in indexAppDelegate.m) (mostly macro)
// do this from anywhere to dismiss the keybard
- (void)dismissKeyboard {    // from: http://stackoverflow.com/questions/741185/easy-way-to-dismiss-keyboard

    UITextField *tempTextField = [[UITextField alloc] initWithFrame:CGRectZero];

    UIViewController *myRootViewController = <#viewController#>; // for simple apps (INPUT: viewController is whatever your root controller is called.  Probably is a way to determine this progragrammatically)
    UIViewController *uivc;
    if (myRootViewController.navigationController != nil) { // for when there is a nav stack
        uivc = myRootViewController.navigationController;
    } else {
        uivc = myRootViewController;
    }

    if (uivc.modalViewController != nil) { // for when there is something modal
        uivc = uivc.modalViewController;
    } 

    [uivc.view  addSubview:tempTextField];

    [tempTextField becomeFirstResponder];
    [tempTextField resignFirstResponder];
    [tempTextField removeFromSuperview];
    [tempTextField release];

}

হুম - ডাউন-ভোট কেন? আমি পরীক্ষিত কোড সহ অন্য উত্তরে সুনির্দিষ্ট বাস্তব-বিশ্বের ত্রুটিগুলি সম্বোধন করেছি। আমি আপ-ভোটের অভাব বুঝতে পারি, তবে আমাকে নেতিবাচক অঞ্চলে ভোট দেওয়া সত্য হতাশা। আমি এখনও আশা করি উপরের উত্তরটি অন্য কাউকে সহায়তা করে।
জেজে রোহার

1

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


1

আপনার পাঠ্যক্ষেত্রগুলি ... এবং পাঠ্যদর্শনগুলি সাবক্লাস করুন

সাবক্লাসে এই কোডটি রাখুন ..

-(void)conformsToKeyboardDismissNotification{

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dismissKeyBoard) name:KEYBOARD_DISMISS object:nil];
}

-(void)deConformsToKeyboardDismissNotification{

    [[NSNotificationCenter defaultCenter] removeObserver:self name:KEYBOARD_DISMISS object:nil];
}

- (void)dealloc{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    [self resignFirstResponder];
}

পাঠ্যক্ষেত্রের প্রতিনিধিগুলিতে (একইভাবে পাঠ্যদর্শন প্রতিনিধিদের জন্য)

-(void)textFieldDidBeginEditing:(JCPTextField *)textField{
     [textField conformsToKeyboardDismissNotification];
}


- (void)textFieldDidEndEditing:(JCPTextField *)textField{
    [textField deConformsToKeyboardDismissNotification];
}

সব সেট .. এখন আপনার কোডের যে কোনও জায়গা থেকে বিজ্ঞপ্তিটি পোস্ট করুন। এটি যে কোনও কীবোর্ডকে পদত্যাগ করবে।


1

এবং দ্রুত আমরা করতে পারি

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

আমি বুঝতে পারি না প্রথম প্রতিক্রিয়াশীল কীভাবে কাজ করে .. আমি এটি কোথায় রাখি? আমার দৃষ্টিতে নিয়ন্ত্রক বা প্রতিনিধি?
শায়ান সি

কিছু যায় আসে না। আপনি যেখানে চান সেখানে এটি রাখতে পারেন। অর্থাত বোতাম ক্রিয়া
Eike

1

কীবোর্ড পপ আপ হওয়ার পরে কোনও কীবোর্ড খারিজ করতে, এখানে 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/


0

আমি ঘৃণা করি যে প্রাইভেট এপিআই কলগুলি ব্যবহার না করে প্রোগ্রামগতভাবে কীবোর্ড খারিজ করার কোনও "গ্লোবাল" উপায় নেই। প্রায়শই, আমার প্রথমে কী উত্তর দেওয়া হয় তা না জেনে প্রোগ্রামটিমে কীবোর্ডটি খারিজ করা দরকার। আমি selfঅবজেক্টিভ সি রানটাইম এপিআই ব্যবহার করে পরিদর্শন করেছি , এর সমস্ত বৈশিষ্ট্য গণনা করেছি, প্রকারেরগুলি খুঁজে বের করে এনে UITextFieldপ্রেরণ করেছিresignFirstResponder বার্তা ।

এটি করা এত কঠিন হওয়া উচিত নয় ...


0

এটি সুন্দর নয়, তবে আমি যেভাবে প্রথম প্রতিবেদককে পদত্যাগ করব যখন আমি জানিনা যে প্রতিক্রিয়াশীল কী তা:

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

  [self.invisibleField becomeFirstResponder];
  [self.invisibleField resignFirstResponder];

0

আপনি সাবউভিউগুলির মাধ্যমে পুনরাবৃত্তভাবে পুনরাবৃত্তি করতে পারেন, সমস্ত ইউআইটিেক্সটফিল্ডগুলির একটি অ্যারে সঞ্চয় করতে পারেন এবং তারপরে লুপটি এনে সমস্তকে ইস্তফা দিতে পারেন।

সত্যিই দুর্দান্ত সমাধান নয়, বিশেষত আপনার যদি প্রচুর সাবউভিউ থাকে তবে সাধারণ অ্যাপ্লিকেশনগুলির জন্য এটি কৌশলটি করা উচিত।

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

সৃজনশীল হোন, আমার এই প্রশ্নটি পাওয়ার পরে আমার অ্যাপ্লিকেশনটির জন্য এটি মনে করতে আমার কেবল 10 মিনিট সময় নিয়েছিল।


এই মাস আগে সমাধান করা হয়েছে;) আমি কেবল সক্রিয় ক্ষেত্রটি ফোকাসে এবং এটি ব্যবহার করে সংরক্ষণ করেছি।
সেভেন্তোস

0

সামান্য আরও শক্তিশালী পদ্ধতিটি সম্প্রতি আমার ব্যবহার করা দরকার:

- (void) dismissKeyboard {
    NSArray *windows = [UIApplication sharedApplication].windows;

    for(UIWindow *window in windows) [window endEditing:true];

    //  Or if you're only working with one UIWindow:

    [[UIApplication sharedApplication].keyWindow endEditing:true];
}

আমি খুঁজে পেয়েছি যে অন্যান্য কয়েকটি "বৈশ্বিক" পদ্ধতি কার্যকর হয়নি (উদাহরণস্বরূপ, UIWebViewএবং WKWebViewপদত্যাগ করতে অস্বীকার করেছেন)।


0

আপনার দৃশ্যে একটি ট্যাপ অঙ্গভঙ্গি সনাক্তকারী যুক্ত করুন nd এবং এটি আইব্যাকশনটি সংজ্ঞায়িত করুন

আপনার .m ফাইলটি এমন হবে

    - (IBAction)hideKeyboardGesture:(id)sender {
    NSArray *windows = [UIApplication sharedApplication].windows;
    for(UIWindow *window in windows) [window endEditing:true];
    [[UIApplication sharedApplication].keyWindow endEditing:true];
}

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


0

হ্যাঁ, এন্ডএডিটিং সেরা বিকল্প। এবং আইডাব্লু the.০ থেকে স্ক্রোল দর্শনটির UIScrollViewসাথে ইন্টারঅ্যাক্ট করার জন্য কীবোর্ডকে খারিজ করার জন্য দুর্দান্ত বৈশিষ্ট্য রয়েছে। এটি অর্জনের জন্য, আপনি এর keyboardDismissModeসম্পত্তি সেট করতে পারেনUIScrollView

কীবোর্ড বরখাস্ত মোডটি সেট করুন:

tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag

এটির অন্যান্য কয়েকটি প্রকার রয়েছে। এই আপেল নথিটি দেখুন



0

সহজ উপায়টি পদ্ধতিটি কল করা

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
    if(![txtfld resignFirstResponder])
    {
        [txtfld resignFirstResponder];
    }
    else
    {

    }
    [super touchesBegan:touches withEvent:event];
}

আপনার সেখানে 'যদি' দরকার নেই, পদত্যাগ করুন ফার্স্ট রেসপন্ডার যাইহোক এটি করতে হবে। সম্ভবত আপনি বোঝাতে চেয়েছিলেন - (BOOL) canResignFirstResponder?
সেভেন্তো

0

আপনাকে এই পদ্ধতির একটি ব্যবহার করতে হবে,

[self.view endEditing:YES];

অথবা

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