22

मैं एक मोडल व्यू कंट्रोलर से आईपैड कीबोर्ड छुपाने की कोशिश कर रहा हूं लेकिन यह काम नहीं करता है। मैंने फर्स्ट रेस्पॉन्डर को इस्तीफा देने का प्रयास किया है, लेकिन अगर हम एक मोडल व्यू कंट्रोलर में हैं तो इसका कोई असर नहीं पड़ता है। मैंने एक गैर-मोडल UINavigationController में एक ही UIViewController के साथ resignFirstResponder की कोशिश की और कीबोर्ड सही ढंग से छुपाता है।एक मोडल व्यू कंट्रोलर से आईपैड कीबोर्ड कैसे छिपाएं?

क्या कोई इस समस्या को हल करने के बारे में जानता है?

धन्यवाद।

[अपडेट] ऐसा लगता है कि मेरे कोड में कुछ गड़बड़ है क्योंकि इस्तीफा फर्स्ट रेस्पॉन्डर काम करता है (मैंने अपने कोड का उपयोग करने के बजाय एक साधारण परीक्षण केस बनाया है)। लेकिन मुझे अभी भी पता नहीं है कि समस्या क्या है।

+1

अच्छी तरह से मैं iPad सिम्युलेटर में एक ही समस्या मिल ताकि आप एक :) – Cal

+0

आदमी की जरूरत नहीं है, मैं एक ही समस्या के साथ कुछ ही घंटों बर्बाद कर रहा था – CVertex

+1

हाँ यह निश्चित रूप से आईओएस 3.2 के साथ एक बग है। मैं loginForm.modalPresentationStyle = UIModalPresentationPageSheet UIModalPresentationFormSheet –

उत्तर

14

ऐसा इसलिए था क्योंकि मैं UIModalPresentationFormSheet का उपयोग कर रहा था। अन्य सभी उम्मीद के अनुसार काम करते हैं .... उस पर कई घंटे बर्बाद हो गए।

+0

मुझे एक ही समस्या है - क्या यह UIModalPresentationFormSheet के साथ एक बग है? – davbryn

+0

मुझे लगता है कि वे मानते हैं कि क्या आप फॉर्म एंट्री कर रहे हैं, आप कभी भी कीबोर्ड को छिपाना नहीं चाहेंगे ... मैंने इसे अपने मामले में एक गैर-मोडल व्यू कंट्रोलर में बदल दिया। – Cal

+1

मैनेकाइज़र की टिप्पणी के साथ 0xced का जवाब देखें। –

3

मैं सिर्फ इस बात की पुष्टि की समस्या वास्तव में UIModalPresentationFormSheet है और सेब rdar को एक बग रिपोर्ट दायर: // 8084017

+0

बेकार है कि हमें 4 के लिए इंतजार करना है।0 "गिरावट" में आईपैड के लिए बाहर आने के लिए (जब भी यह है) –

+0

क्या मैं पूछ सकता हूं, क्या आपने रिपोर्ट की गई बग के बारे में सेब से फीडबैक प्राप्त किया है? – thatsdisgusting

3

मैं एक UIModalPresentationPageSheet आकार बदलने के द्वारा इस हल किया। मेरा उत्तर here देखें।

34

जाहिर है, एक नई -[UIViewController disablesAutomaticKeyboardDismissal] विधि है जिसे आप आईओएस 4.3 में इस समस्या को हल करने के लिए ओवरराइड कर सकते हैं।

+1

मैंने इस विधि को अपने मोडल UIViewController पर लागू किया है लेकिन यह अभी भी कीबोर्ड को खुला रखता है। कोई विचार? धन्यवाद। – morais

+23

@morais अगर आप नेविगेशन नियंत्रक के अंदर अपना व्यू कंट्रोलर पेश कर रहे हैं तो आपको UINavigationController को उप-वर्ग करना होगा और विधि को कार्यान्वित करना होगा। – manicaesar

+0

वाह ... दस्तावेज में वह कहां है। तुमने मुझे सिर्फ कामकाजी आदमी का एक टन बचा लिया। धन्यवाद! –

5

यह खोजने के लिए कुल दर्द था। आईओएस में एक गरीब एपीआई डिजाइन की तरह लगता है। उत्तर के लिए @ 0xced और @manicaesar की बहुत प्रशंसा।

भविष्य के देवताओं के लिए मेरा समेकित उत्तर यहां है जो दीवार के खिलाफ अपना सिर मार रहे हैं।

यदि यह एक एकल दृश्य नियंत्रक है, तो बस disablesAutomaticKeyboardDismissal ओवरराइड करें और NO वापस करें।

यदि यह एक मॉडल में एक नेविगेशन नियंत्रक है, तो जैसे अपने खुद के UINavigationController उपवर्ग बनाएँ:

ज में ...

 

@interface MyNavigationController : UINavigationController 

@end 

मीटर में ....

 
@implementation MyNavigationController 


#pragma mark - 
#pragma mark UIViewController 
- (BOOL)disablesAutomaticKeyboardDismissal { 
    return NO; 
} 

@end 

आपके कोड में जो एक मोडल व्यू कंट्रोलर दिखाता है।

 
UIViewController *someViewController = [[UIViewController alloc] init]; 

MyNavigationController *navController = [[MyNavigationController alloc] initWithRootViewController:someViewController]; 

navController.modalPresentationStyle = UIModalPresentationFormSheet; 
navController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
[self presentModalViewController:navController animated:YES]; 

+0

धन्यवाद! इस फिक्स ने मेरी मदद की। –

संबंधित मुद्दे