2012-08-11 15 views
11

क्या कीबोर्ड के एनीमेशन के बिना पहले उत्तरदाता बनने के लिए UITextField का कोई तरीका है? यही है, ऐसा करें कि कीबोर्ड बस प्रकट होता है?एनीमेशन के बिना पहले उत्तरदाता बनें

असल में, मैं UIViewControllerUITextField है कि अधिक एक दूसरे UIViewController धक्का कर रहा हूँ, और जब कि दूसरे दृश्य नियंत्रक ढेर बंद पॉप हो जाता है, मैं UITextField तुरंत पहले प्रत्युत्तर दर्जा हासिल करना चाहते हैं, ताकि जब दूसरे दृश्य नियंत्रक पॉप हो जाता है, उपयोगकर्ता कभी भी टेक्स्ट फ़ील्ड को नोटिस नहीं करता था, पहले प्रतिक्रियाकर्ता नहीं था।

अभी मेरे पास यह है कि जब यह पॉप हो जाए, तो कीबोर्ड स्क्रीन को एनिमेट करता है, लेकिन मैं नहीं देखना चाहता हूं।

कोई विचार?

उत्तर

14

आप की तरह तो

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:0.0]; 
[UIView setAnimationDelay:0.0]; 
[UIView setAnimationCurve:UIViewAnimationCurveLinear]; 

[textField becomeFirstResponder]; // <---- Only edit this line 

[UIView commitAnimations]; 

इस कुंजीपटल अचानक प्रकट करने के लिए कारण होगा एक UIView एनिमेशन का उपयोग कर सकते हैं।

आप एक ही लेकिन क्या कर सकते हैं -resignFirstResponder

स्विफ्ट के साथ ..

UIView.beginAnimations(nil, context: nil) 
    UIView.setAnimationDuration(0.0) 
    UIView.setAnimationDelay(0.0) 
    someTextView.resignFirstResponder() 
    UIView.commitAnimations() 
+0

प्रतीक्षा करें UIView क्या है? क्या वह 'self.view' जैसा है, या वह' UITextField' है? साथ ही, क्या मुझे इसे 'viewWillAppear' में रखना चाहिए? –

+0

UIView कक्षा का संदर्भ देता है। एकमात्र भाग जिसे आप बदलने की जरूरत है 'textField' है। यह UITextField का नाम होना चाहिए जिसे आप पहले रेस्पॉन्डर –

+0

एचएम करना चाहते हैं, लेकिन मैंने कुछ भी नहीं बदला है ... मुझे लगता है कि यह बात यह है कि टेक्स्ट फ़ील्ड के साथ व्यू कंट्रोलर पहले ही लोड हो चुका है। जब दृश्य बनाया जाता है, तो यह तुरंत दिखने जैसा दिखता है, लेकिन जब मैं इस दृश्य नियंत्रक को स्टैक पर किसी अन्य नियंत्रक से वापस पॉप करता हूं, तो यह पहले ही लोड हो चुका है, ऐसा कभी नहीं होता है। मैंने इस कोड को 'viewWillAppear' में रखा है। मुझे क्या करना चाहिए? –

1

बस उपयोगकर्ता नोटिस कभी नहीं क्षेत्र में अपनी स्थिति खो रही बनाने के लिए पहले प्रत्युत्तर के रूप में सेट -viewDidAppear में।

-(void)viewWillAppear:(BOOL)animated { 
    if ([self isViewLoaded] && self.textField) 
     [self.textField becomeFirstResponder]; 
     [super viewWillAppear:animated]; 
} 

मैं एक छोटा नमूना परियोजना dropbox पर रख दिया है इस कोड का उपयोग, यदि आप इसे करना चाहते हैं।

+0

आप '[सुपर व्यूविल्लएपियर: एनिमेटेड]' को कॉल करना भूल गए - आपको सड़क के नीचे कुछ समस्याएं हो सकती हैं। 'स्वयं को बुलाओ।देखें कि यह देखने के लिए कि दृश्य नियंत्रक पर मौजूद है या नहीं, दृश्य निर्माण को ट्रिगर करेगा, यह '[self isViewLoaded]' का उपयोग करना बेहतर है। अंत में, इस विशेष मामले में आप 'viewWillAppear' विधि के भीतर हैं, यह तथ्य बताता है कि दृश्य पहले से ही बनाया गया था –

+0

मेरा मूल आईओएस भूलना, कभी नहीं। साथ ही, self.view चेक _not_ को एक दृश्य निर्माण को मजबूर करता है (अभी परीक्षण किया गया है), क्योंकि -लोड व्यू को तब देखा जाता है जब व्यू कंट्रोलर का दृश्य शून्य होता है, जो मैं पहले स्थान पर जांच रहा हूं। – CodaFi

0

मैं हूँ, mot यकीन है कि क्या iOS संस्करण का उपयोग करते हैं या किस बिंदु पर आपको कॉल becomeFirstResponder iOS5/iOS6 के लिए viewWillAppear: में [textFieldReference becomeFirstResponder] कॉलिंग अभी जिस तरह आप के लिए यह करना चाहता था काम करने के लिए लगता है है:

यह किया जा रहा है दृश्य नियंत्रक के दृश्य से पहले ही कहा जाता है (यह है कि यदि आप मैन्युअल रूप से दृश्य नियंत्रक पदानुक्रम को संभाल नहीं पाते हैं) और जैसे ही यह नेविगेशन नियंत्रक कीबोर्ड में दिखाई देता है, पहले से ही प्रस्तुत किया गया है और टेक्स्ट फ़ील्ड पर ध्यान केंद्रित किया गया है।

उस ने कहा, कोई सार्वजनिक तरीका नहीं है जिसे मैंने सुना है जो कीबोर्ड उपस्थिति शैली निर्दिष्ट करने की अनुमति देगा।

+0

सार्वजनिक तरीका UIView का कोर एनीमेशन रैपर है जैसे @ एनएसएआरएआरए के जवाब में। – CodaFi

+0

मैं आईओएस 5.0 का उपयोग कर रहा हूं, हालांकि जब मैंने कोशिश की तो कुछ भी नहीं बदला ... –

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