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


214

বিঃদ্রঃ:

আইওএস ৪.৩ হিসাবে সমাধানের জন্য গৃহীত উত্তর (শীর্ষে ভোট দেওয়া হয়নি) দেখুন।

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

মূলত, যদি আমি নীচের হিসাবে নীচের লাইনের সাথে নেভিগেশন কন্ট্রোলার উপস্থাপন করি:

navigationController.modalPresentationStyle = UIModalPresentationFormSheet;

কীবোর্ড খারিজ করতে অস্বীকার করে। যদি আমি এই লাইনটি মন্তব্য করি তবে কীবোর্ডটি ঠিকঠাক হয়ে যায়।

...

আমি দুটি টেক্সটফিল্ড, ব্যবহারকারীর নাম এবং পাসওয়ার্ড পেয়েছি; ব্যবহারকারীর একটি নেক্সট বোতাম আছে এবং পাসওয়ার্ডের একটি সম্পন্ন বোতাম রয়েছে। আমি যদি এটি কোনও মডেল নেভিগেশন কন্ট্রোলারে উপস্থাপন করি তবে কীবোর্ডটি সরে যাবে না।

WORKS

broken *b = [[broken alloc] initWithNibName:@"broken" bundle:nil];
[self.view addSubview:b.view];

কাজ করে না

broken *b = [[broken alloc] initWithNibName:@"broken" bundle:nil];
UINavigationController *navigationController = 
[[UINavigationController alloc]
 initWithRootViewController:b];
navigationController.modalPresentationStyle = UIModalPresentationFormSheet;
navigationController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:navigationController animated:YES];
[navigationController release];
[b release];

যদি আমি নেভিগেশন নিয়ামক অংশটি সরিয়ে ফেলি এবং 'বি' নিজেই মডেল ভিউ কন্ট্রোলার হিসাবে উপস্থাপন করি তবে এটি কাজ করে। ন্যাভিগেশন নিয়ামক সমস্যা?

WORKS

broken *b = [[broken alloc] initWithNibName:@"broken" bundle:nil];
b.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:b animated:YES];
[b release];

WORKS

broken *b = [[broken alloc] initWithNibName:@"broken" bundle:nil];
UINavigationController *navigationController = 
    [[UINavigationController alloc]
         initWithRootViewController:b];
[self presentModalViewController:navigationController animated:YES];
[navigationController release];
[b release];

নীচের এসও প্রশ্নটি একই সমস্যা বলে মনে হচ্ছে, তবে কোনও উত্তর নেই: stackoverflow.com/questions/3019709/…
ক্যাল

+1 আপনার দুর্দান্ত ব্যাখ্যার জন্য আপনাকে ধন্যবাদ। তবে কোথায় আমাকে সেই পদ্ধতিটি রাখতে হবে? মডেল কন্ট্রোলার উপস্থাপনের জন্য কোডটি তৈরি করার জায়গায় এটি কাজ করছে না বলে মনে হচ্ছে ...
লোরেঞ্জো বি

1
এটি নিজেই মডেল ভিউ কন্ট্রোলার শ্রেণিতে থাকতে হবে।
কালে

ধন্যবাদ। আমি দেখি. আমি এটিকে UINavigationControllerক্লাসের জন্য একটি বিভাগে রেখে সমাধান করেছি । চিয়ার্স।
লরেঞ্জো বি

এই প্রশ্নের জন্য আমি আপনার কাছে indeণী আমি অবাক হয়েছিলাম যে resignFirstResponderকার্যকর করা হচ্ছে তবে কীবোর্ডটি এখনও প্রদর্শিত হচ্ছে। আমার দৃশ্য (নেভিগ কনট্রেলারের সাথে উপস্থাপনাফর্মশীট) ঠিক আপনার মতো। অসংখ্য ধন্যবাদ!!
sErVerdevIL

উত্তর:


115

মডেল উপস্থাপন করা ভিউ কন্ট্রোলারে, disablesAutomaticKeyboardDismissalফিরে আসার জন্য কেবল ওভাররাইড করুন NO:

- (BOOL)disablesAutomaticKeyboardDismissal {
    return NO;
}

হ্যাঁ, ৪.৩ থেকে এটি মনে হয়। প্রশ্ন আপডেট করবে। ধন্যবাদ!
ক্লে

2
এটিকে নেভিগেশন কন্ট্রোলারে যুক্ত করতে হবে
২৪

1
হ্যাঁ, আপনি এটিকে নেভিগেশনকন্ট্রোলারে ওভাররাইট করার সময় কাজ করে। এটিই কেবল আমার পক্ষে কাজ করেছিল।
জেমস লরেনস্টিন

জীবন রক্ষাকারী! অ্যাপল কেন স্টাফ করে? অবশ্যই এটি কোনও ডিফল্ট হওয়া উচিত এবং আমরা যদি সত্যই এটি করতে চাই তবে আমাদের এটি পরিবর্তন করার অনুমতি দিন
সোমমামন

ইউআইভিউউকন্ট্রোলার থেকে প্রাপ্ত ক্লাসে কাজ করছেন না, অক্ষম করুন স্বয়ংক্রিয় কীবোর্ডডিজমাল কখনও বলা হয় না
জর্জি আরিমানি

172

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

সম্পাদনা করুন: বিকাশকারী ফোরামে অ্যাপল ইঞ্জিনিয়ারের প্রতিক্রিয়া এখানে রয়েছে :

আপনার মতামত কি কোনও সুযোগে ইউআইএমডালপ্রেজেন্টেশনফর্মশিট শৈলীর সাথে উপস্থাপিত হয়েছিল? ঘন ঘন ইন-আউট অ্যানিমেশনগুলি এড়াতে, কোনও প্রথম প্রতিক্রিয়াকারী না থাকলেও কখনও কখনও কীবোর্ড অন স্ক্রিনে থাকবে। এটি একটি বাগ না।

এটি অনেক লোককে সমস্যা দিচ্ছে (আমার অন্তর্ভুক্ত) তবে এই মুহুর্তে এটির আশপাশে কাজ করার কোনও উপায় বলে মনে হচ্ছে না।

হালনাগাদ:

আইওএস ৪.৩ এবং তারপরে, আপনি এখন কোনও ফিরে আসতে আপনার ভিউ কন্ট্রোলারে d -ডিসেবলস অটোমেটিক কীবোর্ডডিজমাল 'প্রয়োগ করতে পারেন:

- (BOOL)disablesAutomaticKeyboardDismissal {
    return NO;
}

এটি সমস্যার সমাধান করে।


7
বিরাম বাহ, ঠিক আছে। মাথা আপ জন্য অনেক ধন্যবাদ। অভিপ্রায় আপেল .. :(
কলে

আপনি কি অ্যাপলকে বাগ রিপোর্ট জমা দিয়েছেন? আইডি # 8384423 এর অধীনে আমি এটি করেছি the আচরণ পুনরুত্পাদন করার জন্য আমি একটি নমুনা আবেদনও জমা দিয়েছি।
শেভি ফ্রগ

3
আইওএস ৪.৩ অনুসারে এখন একটি অক্ষম স্বয়ংক্রিয় কীবোর্ডডিজমাল পদ্ধতি রয়েছে যা এই সমস্যার সমাধান করে।
ক্লে

5
আমি চেষ্টা করি যে স্বয়ংক্রিয় কীবোর্ডডিজমাল পদ্ধতিটি অক্ষম করে তবে এটি এখনও সমস্যার সমাধান করেনি, কীভাবে এটি সমাধান করবেন?
আর দেবী

3
@ স্নিপস: আপনি একটি মোডাল ফর্ম শিট উপস্থাপন করার সময় আপনাকে এমন একটি UINavigationControllerউপশ্রেণী তৈরি disablesAutomaticKeyboardDismissalকরতে হবে যা ফিরে আসতে NOও নেভিগেশন নিয়ন্ত্রক হিসাবে এটি ব্যবহার করতে ওভাররাইড করে । নীচে @ মিহা-হিব্বার থেকে উত্তরটি দেখুন।
পাসকাল

149

আপনি যদি একটি দিয়ে মডেল প্রদর্শন করছেন তবে সাবধান হন UINavigationController। তারপরে আপনাকে disablesAutomaticKeyboardDismissalনেভিগেশন কন্ট্রোলারে সেট করতে হবে এবং ভিউ কন্ট্রোলারে নয়। আপনি সহজেই বিভাগগুলির সাথে এটি করতে পারেন।

ফাইল: ইউআইএনএভিগেশন কন্ট্রোলার + কীবোর্ডডিজম

#import <Foundation/Foundation.h>

@interface UINavigationController (KeyboardDismiss)

- (BOOL)disablesAutomaticKeyboardDismissal;

@end

ফাইল: ইউআইএনএভিগেশন কন্ট্রোলার + কীবোর্ডডিজম.এম

#import "UINavigationController+KeyboardDismiss.h"

@implementation UINavigationController(KeyboardDismiss)

- (BOOL)disablesAutomaticKeyboardDismissal
{
    return NO;
}

@end

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


19
+1 টি, পরিশেষে আমি এই সমস্যার জন্য তথ্য অনুপস্থিত টুকরা দেখতে হাইলাইট: যে এক চাহিদা ওভাররাইড করতে disablesAutomaticKeyboardDismissalএর UINavigationController, না নিজের দৃশ্য নিয়ামক, এই সমস্যাটি সমাধানের জন্য।
ডার্কডাস্ট

নিস! ঠিক যেটা আমার দরকার ছিল. ধন্যবাদ.
জাস্টিন

পারফেক্ট। অফিসিয়াল ডক্স থেকে পরিষ্কার নয় তবে ইউআইএনএভিগেশন কন্ট্রোলার প্রতিক্রিয়াশীল চেইনে থাকার কারণে তা উপলব্ধি করে। দুর্দান্ত উত্তর। ধন্যবাদ!
imnk

1
আমি একটি ইউআইএসপ্লিটভিউ কনট্রোলার থেকে একটি মডেল ডায়ালগ উপস্থাপন করছি। আমি উপরের কোডটি চেষ্টা করেছি, তবে ইউআইএনএভিগেশন কন্ট্রোলারের জন্য ইউআইএসপ্লিটভিউ কনট্রোলার প্রতিস্থাপন করেছি, তবে এটি এখনও কার্যকর হয় না। এই পদ্ধতিটি কি কোনও ইউআইএসপ্লিটভিউকন্ট্রোলারের উপরও কাজ করা উচিত?
27:42 এ 14

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

51

আমি UIModalPresentationPageSheetউপস্থাপনা শৈলীটি ব্যবহার করে এবং এটি উপস্থাপনের সাথে সাথেই এটির আকার পরিবর্তন করে সমাধান করেছি। তাই ভালো:

viewController.modalPresentationStyle = UIModalPresentationPageSheet;
viewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:viewController animated:YES];
viewController.view.superview.autoresizingMask = 
    UIViewAutoresizingFlexibleTopMargin | 
    UIViewAutoresizingFlexibleBottomMargin;    
viewController.view.superview.frame = CGRectMake(
    viewController.view.superview.frame.origin.x,
    viewController.view.superview.frame.origin.y,
    540.0f,
    529.0f
);
viewController.view.superview.center = self.view.center;
[viewController release];

হুমমম ... এটি একেবারেই ঠিক নয় ... আকার পরিবর্তনের ফলে মডেলগুলি মজাদার রঙে রঙিন হতে পারে ... এটি নতুন মাপের বাক্সে বা কোনও কিছুর সাথে বিষয়বস্তুটিকে স্কুইশ করার মতো করে তোলে ... সবকিছু মজাদার দেখাচ্ছে। :(
তোফাঃ

এটির সাথে ঘোরানোর সমস্যাও রয়েছে ... আপনি যদি এই
মডেলটি চলার

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

1
এটি কেবল ততক্ষণ কাজ করে যতক্ষণ আপনি এই ভিউটির উপরে অন্য কোনও দৃশ্যের উপর চাপ না দেন। কারণ আপনি যখন ইউআইমোডালপ্রেজেনশন পেজশিট উপস্থাপিত দৃশ্যের উপরে উপস্থিত ভিউটি বন্ধ করেন, তখন এটি মূল আকারে ফিরে আসে।
ভি 1 আর

এটা কাজ করেছে. তবে ভিউতে শব্দটি কিছুটা ঝাপসা দেখায়। কেন জানি না।

1

আপনি যদি অন্য কোনও মডেল প্রদর্শন টগল করেন তবে কীবোর্ডটি অদৃশ্য হয়ে যেতে পারেন। এটি সুন্দর নয় এবং এটি প্রাণবন্ত হয় না তবে আপনি এটিকে দূরে সরিয়ে নিতে পারেন।

যদি ঠিক করা হত তবে দুর্দান্ত হবে তবে আপাতত এটি কাজ করে। আপনি এটিতে একটি বিভাগে আটকে UIViewControllerরাখতে পারেন এবং কীবোর্ডটি যেতে চাইলে এটিকে কল করতে পারেন:

@interface _TempUIVC : UIViewController
@end

@implementation _TempUIVC
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return YES;
}
@end

@implementation UIViewController (Helpers)

- (void)_dismissModalViewController {
    [self dismissModalViewControllerAnimated:NO];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidHideNotification object:nil];
    [self release];
}

- (void)forceKeyboardDismissUsingModalToggle:(BOOL)animated {
    [self retain];
    _TempUIVC *tuivc = [[_TempUIVC alloc] init];
    tuivc.modalPresentationStyle = UIModalPresentationCurrentContext;
    [self presentModalViewController:tuivc animated:animated];
    if (animated) {
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_dismissModalViewController) name:UIKeyboardDidHideNotification object:nil];
    } else
        [self _dismissModalViewController];
    [tuivc release];
}

@end

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

-Adam


1

আপনি সর্বজনীন অ্যাপ্লিকেশনটিতে কেবল আইডিয়ামটি পরীক্ষা করে এটি ব্যবহার করতে পারেন এবং যদি এটি কোনও আইপ্যাড হয় তবে কীবোর্ডটি স্বয়ংক্রিয়ভাবে পপআপ করবেন না এবং ব্যবহারকারীরা যা সম্পাদনা করতে চান তা আলতো চাপতে দিন।

সর্বোত্তম সমাধান নাও হতে পারে তবে এটি খুব সোজা and


1

আপনার কোডটিতে এই কোডটি রাখুন উইলডিস্পায়ার: বর্তমান নিয়ামকের পদ্ধতিটি এটি ঠিক করার আরেকটি উপায়:

Class UIKeyboardImpl = NSClassFromString(@"UIKeyboardImpl");
id activeInstance = [UIKeyboardImpl performSelector:@selector(activeInstance)];
[activeInstance performSelector:@selector(dismissKeyboard)];

1

আমি এটি পেয়েছি disablesAutomaticKeyboardDismissalএবং একটি disablesAutomaticKeyboardDismissalফাংশন যুক্ত করা আমার পক্ষে UITextFieldএকটি মডেল ডায়ালগটিতে কাজ করে না ।

অনস্ক্রিন কীবোর্ডটি কেবল সরে যাবে না।

আমার সমাধানটি ছিল আমার ডায়ালগের সমস্ত পাঠ্য-ইনপুট নিয়ন্ত্রণগুলি অক্ষম করা , তারপরে প্রাসঙ্গিকগুলিকে দ্বিতীয় সেকেন্ডের পরে পুনরায় সক্ষম করুন।

মনে হচ্ছে যেন যখন আইওএস দেখেন যে কেউ UITextFieldনিয়ন্ত্রণগুলি সক্রিয় করা থাকে, তাহলে এটি নেই কীবোর্ড পরিত্রাণ পেতে।


0

আমি নিশ্চিত যে আপনি এটি দেখেছেন তবে আপনি নিশ্চিত যে আপনার নিয়ামক শ্রেণিটি সঠিকভাবে ইউআইটিেক্সটফিল্ডের প্রতিনিধি হিসাবে আঁকিয়েছে, তাই না?


আমি নিজে নিজে এটি সেট করেছি এবং প্রতিনিধি পদ্ধতিগুলি বলা হয়, তাই হ্যাঁ।
কালে

0

সম্ভবত না ফেরত না, তবে হ্যাঁ। সুতরাং এটি দূরে যেতে পারে।

এবং textFieldShouldEndEditingআপনারও কি প্রত্যাবর্তন হ্যাঁ?

আর আপনি গুলি করছেন কেন[nextResponder becomeFirstResponder] ?! দুঃখিত আমি এখন দেখতে

আমার কাছে বেশ কয়েকটি ইউআইটিএক্সেক্সটভিউ রয়েছে যা সকলেরই তাদের "সম্পাদনযোগ্য" সম্পত্তি FALSE এ সেট করে।

আমরা কি অনুমান করতে পারি যে তাদের কোনওটিরই কোনও সুযোগ tagনেই secondField.tag+1? যদি তা হয় তবে আপনি তাদের প্রথম জবাবদিহিকারীকে পদত্যাগ করার পরিবর্তে প্রথম প্রতিক্রিয়াশীল হতে বলছেন। কাঠামোগত যদি কিছু এনএসএলগ () লাগাতে পারে।


1
আমি যা বলতে পারি তা থেকে কোনও = নতুন লাইন don'tোকান না। এবং এটি YES এ সেট করা এটি ঠিক করে নি।
কালে

1
একটি ইউআইটিেক্সটফিল্ড, সংজ্ঞা অনুসারে এক লাইন হওয়া, নতুন লাইনের সাথে খুব বেশি কিছু করে না, আমি মনে করি। সুতরাং এটি ডকস অনুসারে, রিটার্ন / সম্পন্ন বোতামটি টিপে প্রক্রিয়াজাতকরণ সম্পর্কে আরও বেশি।
এমভিডিএস

আপনি কি নিশ্চিত যে আপনি সবকিছু সঠিকভাবে আঁকিয়েছেন? আপনি কি NSLog("tf %x / method ...",textField);সমস্ত প্রতিনিধি কার্য সম্পাদন করেছেন?
এমভিডিএস

ঠিক আছে, প্রতিনিধি ফাংশনগুলি যথাযথভাবে ডাকা হয় এবং ডেলিগেট যথাযথভাবে সেট আপ না করা হয় তবে তারা তা করবে না। এবং এনএসলগ একটি EXC_BAD_ACCESS দেয়। এটি XCode এ বেমানান ধরনের সম্পর্কে আমাকে সতর্ক করে।
কালে

ডি ওহ। দুঃখিত, এটা আমার দেখা উচিত ছিল। আমি এই এনএসলোগের ফলাফলগুলির সাথে উপরের উত্তরটি আপডেট করেছি যেহেতু বিন্যাসটি কমেন্টে নিজেই জাগবে ..
কালে

0

ইউআইএনএভিগেশন নিয়ন্ত্রণকারীদের ক্ষেত্রে যাদের সমস্যা হয়, তাদের অনুরূপ প্রশ্নের উত্তর আমার এখানে দেখুন: https://stackoverflow.com/a/10507689/321785

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


0

একটি নিখুঁত সমাধান নাও হতে পারে, তবে কাজ করে
[সেল্ফ.ভিউ এডিটিং: হ্যাঁ];
আপনার বোতাম বা অঙ্গভঙ্গি যে কোনও জায়গা থেকে মডেল উপস্থাপনের জন্য প্রয়োগ করা হয়েছে from


0
Swift 4.1:
extension UINavigationController {
   override open var disablesAutomaticKeyboardDismissal: Bool {
      return false
   }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.