2014-06-16 5 views
1

У меня есть следующая проблема: у меня есть лист формы, представленный с помощью UITextField. При нажатии UITextField требуется около 3 секунд, пока клавиатура не появится, что очень медленно. Кто-нибудь знает, в чем проблема?На листе бланка iPad очень медленное время отклика

-(BOOL)textFieldShouldReturn:(UITextField *)textField{ 
    if (textField == self.licenseTextField) { 
    [self.licenseTextField resignFirstResponder]; 
    } return YES; 
} 

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ [self.licenseTextField resignFirstResponder]; } 

-(BOOL)disablesAutomaticKeyboardDismissal{ return NO; } 

ответ

1

iOS не освобождает память для клавиатуры, если она не должна показывать клавиатуру. Есть некоторые обходные пути, которые не совсем фантастичны, но функциональны.

Это решение, которое я использую. Я предварительно загружаю клавиатуру в начале приложения, прежде чем показывать фактическое содержимое моего приложения. Процесс запуска занимает немного больше времени, но по крайней мере мой интерфейс не замерзает, когда я покажу клавиатуру позже.

// Обновление: Apple просто отклонила мое приложение, используя метод, показанный ниже во второй раз, поскольку он иногда запускается на черный экран на симуляторе iPad (а не на устройстве!), Бог знает почему.

AppDelegate.m:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil]; 

    UITextField *lagFreeField = [[UITextField alloc] init]; 
    [self.window addSubview:lagFreeField]; 
    [lagFreeField becomeFirstResponder]; 
    [lagFreeField resignFirstResponder]; 
    [lagFreeField removeFromSuperview]; 

    return YES; 
} 

- (void)keyboardDidShow:(NSNotification *) notification { 
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidShowNotification object:nil]; 

    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 0.2 * NSEC_PER_SEC); 
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
     if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { 
      self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil]; 
     } else { 
      self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil]; 
     } 

     self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:self.viewController]; 
     [self.window makeKeyAndVisible]; 
    }); 
} 

Отправка исправлены некоторые проблемы с анимацией, которые я имел, может быть, вам это не нужно. More information on the problem and possible solutions.

+0

Спасибо большое! Это решило его, хотя процесс запуска занимает немного больше времени. Я все еще надеюсь на решение без обходного пути. – konfusius1991

0

Прежде чем применять какой-либо взлом в исходном коде, протестируйте приложение без режима отладки и не подключайтесь к нему. В этой версии много версий iOS. Когда вы тестируете свое приложение в реальной среде, загрузка не будет. Спасибо

Смежные вопросы