UITextField के प्रारंभिक कीबोर्ड एनीमेशन पर सुपर स्लो लैग / विलंब


169

ठीक है, यह समस्या मुझे पागल कर रही है।

मेरे द्वारा मेरे स्पर्श करने के बाद कीबोर्ड को पॉप अप करने में लगभग 3-4 सेकंड लगते हैं UITextField। यह केवल पहली बार होता है जब ऐप लॉन्च होने के बाद कीबोर्ड पॉप अप होता है, बाद में एनीमेशन तुरंत शुरू होता है।

पहले मुझे लगा कि यह बहुत अधिक छवियों को लोड करने की समस्या है, या मेरी UITableView, लेकिन मैंने अभी-अभी केवल एक के साथ एक नया प्रोजेक्ट बनाया है UITextField, और मुझे अभी भी इस समस्या का अनुभव है। मैं iOS 5, Xcode ver 4.2 का उपयोग कर रहा हूं, और iPhone 4S पर चल रहा हूं।

यह मेरा कोड है:

#import "ViewController.h"

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(20, 20, 280, 30)];
    textField.borderStyle = UITextBorderStyleRoundedRect;
    textField.delegate = self;
    [self.view addSubview:textField];
}

@end

क्या यह सभी ऐप्स के लिए एक आम समस्या है?

अभी, एक ही तरीका है कि मैं इसे कुछ हद तक बेहतर बना सकता / सकती हूं textField/ पहले रिस्पॉन्डर में इस्तीफा दे दूं viewDidAppear, लेकिन इससे समस्या पूरी तरह से हल नहीं होती है - यह केवल देरी को लोड करता है जब दृश्य इसके बजाय लोड करता है। यदि मैं textFieldतुरंत लोड करता हूं, जब दृश्य लोड होता है, तब भी मुझे समस्या मिलती है; यदि मैं टेक्स्टफिल्ड को छूने से पहले दृश्य लोड के बाद 3-4 सेकंड प्रतीक्षा करता हूं, तो मुझे देरी नहीं होती है।

जवाबों:


291

इससे पहले कि आप इस समस्या को हल करने के लिए किसी भी विदेशी हैक्स को लागू करें, यह प्रयास करें: डिबग सत्र को रोकें, मल्टीटास्किंग से ऐप को बंद करें, कंप्यूटर से अपने डिवाइस को अनप्लग करें और इसके आइकन को टैप करके सामान्य रूप से ऐप चलाएं। मैंने कम से कम दो मामलों को देखा है जिसमें डिवाइस प्लग किए जाने के दौरान केवल देरी होती है।


2
IOS 8.1 पर चलने वाले iPhone 5 पर मेरे मामले में यह सही जवाब था - मैं पहले कीबोर्ड के लिए 1 सेकंड की देरी के बारे में अनुभव कर रहा था।
bejonbee

7
हां, लैगिंग केवल डिबगिंग के दौरान होता है। अजीब।
पॉल्स

16
धन्यवाद। यह समस्या अभी भी iOS 9.1 / Xcode 7.1, Swift 2.1 पर मौजूद है।
यारोस्लाव

4
FYVM Apple, FYVM। 90 मिनट की समय सीमा पर मैं बर्दाश्त नहीं कर सकता। अगर मैं कर सकता हूँ 20 upvotes। अभी भी iOS9.2 / Xcode 7.2 में मौजूद है
बेसजेन

1
मेरा मुद्दा भी ठीक यही था। जब मैंने अपने मैक से अनप्लग किया तब कोई देरी नहीं हुई थी (ios9) xcode 7.2
डेरेन

148

तो समस्या सिर्फ पहली स्थापना तक सीमित नहीं है जैसा कि मैंने पहले सोचा था, लेकिन हर बार ऐप लॉन्च होने पर होता है। यहाँ मेरा समाधान है कि इस मुद्दे को पूरी तरह से हल करता है।

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  // Preloads keyboard so there's no lag on initial keyboard appearance.
  UITextField *lagFreeField = [[UITextField alloc] init];
  [self.window addSubview:lagFreeField];
  [lagFreeField becomeFirstResponder];
  [lagFreeField resignFirstResponder];
  [lagFreeField removeFromSuperview];
}

1
अच्छा और सरल @Vadoff - यह नीचे दिए गए UIResponder + KeyboardCache उदाहरण का एक इनलाइन संस्करण है
amergin

4
यह ओएस द्वारा संभाला जाना चाहिए था ... लेकिन ओह अच्छी तरह से: /
चक्रित

9
धन्यवाद! समस्या अभी भी ios8 पर बनी हुई है, लेकिन यह काम अभी भी इसे हल करता है
हिटमे

1
@Vadoff सॉल्यूशन काम करता है, लेकिन इसमें 2 मिन्यूज़ हैं: 1) मेरे पास ऐप लोडिंग का लगभग 1 अतिरिक्त दूसरा है; 2) प्राप्त स्मृति चेतावनी (लेकिन, हर समय नहीं)। मैंने देखने के लिए इस कोड को देखने के लिए UIViewController में जोड़ने की कोशिश कीDidLoad, लेकिन कोई प्रभाव नहीं था, शायद मैंने कुछ गलत किया है? क्या आप अपना उत्तर संपादित कर सकते हैं और यदि संभव हो तो व्यू कंट्रोलर के लिए कोड जोड़ सकते हैं।
दीमा डेपलोव

16
तथ्य यह है कि यह सही उत्तर है और कार्य मुझे रोता है। इस हैक को लगाने के बाद मुझे शॉवर लेना पड़ा।
बिल बर्गेस

27

हाँ, मुझे नवीनतम iPhone 4s पर कुछ सेकंड की देरी हुई। घबराओ मत। कुछ कारणों से, यह केवल पहली बार होता है जब एप्लिकेशन डीबग में Xcode से लोड होता है। जब मैंने रिलीज़ किया, तो मुझे देरी नहीं हुई। बस इसे भूल जाओ...


6
यह अनुकूलन स्तर के कारण है Fastest, Smallest [-Os]:। आप इसे बदल सकते हैंBuild Settings > Optimization Level
कार्लोस रिकार्डो

20

3
धन्यवाद, बहुत से लिंक में "पुराने आईफ़ोन पर 1 सेकंड", "3 जी पर ध्यान देने योग्य नहीं", और "नए उपकरणों पर तुरंत लोड" होने के बारे में देरी का उल्लेख है, लेकिन मैं 3-4 की देरी का सामना कर रहा हूं। एक iphone 4 पर सेकंड। मैं कीबोर्ड को पहले से लोड करने की कोशिश करूँगा, लेकिन मुझे चिंता है कि कुछ और समस्या हो सकती है (शायद ios5 या मेरा xcode ver?)।
वडॉफ

क्या आपने कोशिश की कि UITextField और कीबोर्ड एक मूल ऐप में कैसे व्यवहार करता है? इसे स्मृति परीक्षण से दूर करना सुनिश्चित करें (होम बटन पर डबल क्लिक करें ...)। आपके द्वारा पोस्ट किए गए कोड के टुकड़े में कुछ भी गलत नहीं है और 3-4 सेकंड वास्तव में बहुत अधिक लगते हैं - बहुत अधिक। मैंने कभी इस प्रीलोडिंग की कोशिश नहीं की, लेकिन यह एकमात्र वर्कअराउंड की तरह दिखता है।
रोक जर्क

हां, मैप्स के लिए खोज टेक्स्टफिल्ड लॉन्च के बाद क्लिक किए जाने पर कीबोर्ड को तुरंत लाता है। मैंने इसे मेमोरी से हटा दिया और कई बार कोशिश की, यह हर बार तुरंत होता है। मुझे यकीन नहीं है कि मेरा इतना धीमा क्यों है।
वडॉफ

बस मेरे ऐप में से एक पर एक परीक्षण किया गया था जो UITextField का उपयोग करता है - लैग वास्तव में न्यूनतम होना चाहिए। आपके द्वारा पोस्ट किया गया कोड ठीक लगता है इसलिए मुख्य धागे को वापस रखने के लिए कुछ और होना चाहिए। कुख्यात इंस्ट्रूमेंट्स को लॉन्च करने का यह एक अच्छा समय हो सकता है।
रोक जर्क

23
ठीक है, किसी और के लिए जो इस समस्या को लगता है। मुझे पता चला कि यह केवल पहली बार हुआ था जब ऐप को iPhone पर xcode से अपडेट किया गया था। एक बार जब ऐप को आईफोन पर लोड किया जाता है, तो ऐप के साथ किसी भी अन्य उपयोग से सामान्य व्यवहार होगा (मैंने मेमोरी से प्रोग्राम को कुछ बार हटा दिया / सुनिश्चित करने के लिए अपने आईफ़ोन को पुनः आरंभ किया)।
वडॉफ

18

आप Swift में Vadoff के समाधान का उपयोग करके इसे जोड़ सकते हैं।

// Preloads keyboard so there's no lag on initial keyboard appearance.
let lagFreeField: UITextField = UITextField()
self.window?.addSubview(lagFreeField)
lagFreeField.becomeFirstResponder()
lagFreeField.resignFirstResponder()
lagFreeField.removeFromSuperview()

यह मेरे लिए iOS 8 में काम कर रहा है।


5

ब्लॉक में कोड मुख्य कतार में जोड़ा गया और अतुल्यकालिक रूप से चला। (मुख्य धागा बंद न करें)

dispatch_async(dispatch_get_main_queue(), ^(void){
      [textField becomeFirstResponder];
 });

6
एक पाठ्य विवरण जोड़ने का प्रयास करें जो यह बताता है कि आपका कोड क्यों काम करता है और न केवल इसे दें ताकि अन्य लोग इससे सीख सकें।
स्लेज

7
यह कोड वास्तव में मुख्य धागे को अवरुद्ध करता है, आप मुख्य कतार पर भेज रहे हैं ...
वर्नर अल्टिविशर

क्या आप dispatch_async / dispatch_sync के बीच अंतर जानते हैं? और क्या आपको लगता है [textField getFirstResponder]; मुख्य धागे के लिए बहुत मुश्किल है?
सर्गेई पेट्रुक

@Spetruk थ्रेडिंग कॉलिंग डिस्पैच_सुंक को ब्लॉक नहीं किया गया है, लेकिन आप जिस कोड को वास्तव में कोड चलाते हैं वह निश्चित रूप से अवरुद्ध है। एक सिंगल थ्रेड एक ही बार में दो काम नहीं कर सकता है, इसलिए यह कोड मुख्य थ्रेड (dispatch_get_main_queue के कारण) को ब्लॉक करता है, लेकिन जहां थ्रेड को भेजा नहीं जाता है उसे डिस्पैच_संकट कहा जाता है।
केविन

@ केविन लेकिन कुछ मुख्य धागे को अवरुद्ध कर रहा है और परिणामस्वरूप कीबोर्ड एनीमेशन काम नहीं कर रहा है। मैं आपसे सहमत हूं, लेकिन मेरी राय, ऐपडेलगेट में textFiled के साथ समाधान बुरी तरह से बदबू आ रही है।
सेर्गेई पेट्रुक


1

एक संबंधित समस्या, जहां एक UIViewController प्रस्तुत करने के लिए धीमा होगा, UITextField पर कस्टम फ़ॉन्ट के बजाय सिस्टम फ़ॉन्ट का उपयोग करके हल किया गया था। शायद सिस्टम फ़ॉन्ट का उपयोग करना भी इस समस्या के लिए काम कर सकता है?


0

यह बग iOS 9.2.1 में तय किया गया लगता है। अपने डिवाइस को अपग्रेड करने के बाद से, मुझे अब टेक्स्ट फ़ील्ड और कीबोर्ड को प्रदर्शित करने में देरी नहीं होती है जब मेरा डिवाइस मेरे कंप्यूटर से जुड़ा होता है।


1
यह iPhone पर तय किया जा रहा है, लेकिन मैं अभी भी iPad पर अंतराल है।
आदारकस

0

यह चयनित उत्तर iOS 11 पर BAD_EXC क्रैश का कारण बनता है - ठीक करने के लिए ऐप से निकालें


-2

जब viewController का दृश्य लोड किया गया हो, तो आप नीचे दिए गए कोड को जोड़ सकते हैं, जैसे viewDidAppear.Not सिर्फ आवेदन: didFinishLaunchingWithOptions:

UITextField *lagFreeField = [[UITextField alloc] init];
[self.window addSubview:lagFreeField];
[lagFreeField becomeFirstResponder];
[lagFreeField resignFirstResponder];
[lagFreeField removeFromSuperview];
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.