iOS - Как я могу предварительно загрузить клавиатуру? - PullRequest
39 голосов
/ 02 февраля 2012

Проблема

В большинстве приложений для iPhone при первом представлении клавиатуры наблюдается небольшая задержка (по-видимому, создание клавиатуры занимает немало времени, даже на iPhone 4).

Большинство людей, кажется, в порядке с этим. Это не так, меня это действительно беспокоит - и то, как мое приложение представлено, пользователи будут очень смущены тем, что в течение нескольких секунд ничего не происходит, когда они впервые нажимают на текстовое поле.


Что я пробовал

Поиск в Google приводит к одному решению - к сожалению, это недопустимо в iOS 4 ( см. Здесь ).

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


Так ..

Любые идеи приветствуются. Полный рабочий код (для iOS 4 и 5) заслуживает награды (даже если награда должна прийти позже!).

Если решение будет найдено, я планирую создать автономный класс 'KeyboardPreloader', который люди смогут добавить в свой проект, и предварительно загрузить клавиатуру одной строкой кода:)

Ответы [ 4 ]

30 голосов
/ 30 октября 2013

UIResponder + KeyboardCache был написан для решения именно этой проблемы.

Из файла readme этого проекта:

Эта категория на UIResponder дает вам простоеметод +cacheKeyboard, чтобы вы могли контролировать, когда эта работа кэширования будет завершена.Например, если вы загружаете некоторые данные с сервера, вы можете вызвать это во время простоя.Есть еще один метод +cacheKeyboard:, который принимает необязательное значение BOOL.Передача YES этому методу приводит к вызову кэша в next runloop.Итак, если вы выполнили анимацию непосредственно перед вызовом этого метода, она не прервет эту анимацию.

12 голосов
/ 02 февраля 2012

превращение текстового поля в firstResponder, а затем повторное его размещение в viewdidload ... похоже, это работает без задержки при повторной загрузке клавиатуры ...

- (void)viewDidLoad
{
    [super viewDidLoad];

    [textField becomeFirstResponder];
    [textField resignFirstResponder];
        // Do any additional setup after loading the view, typically from a nib.
}
7 голосов
/ 09 октября 2014

Вот что я делаю:

- (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];
}

Супер медленная задержка / задержка при начальной анимации клавиатуры UITextField

0 голосов
/ 01 ноября 2013

Как только пользователь жалуется на мое приложение на клавиатуру с медленной загрузкой. Вот небольшая хитрость для отключения анимации клавиатуры:

- (void)viewDidLoad
{
    [super viewDidLoad];

    // ...

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(willShowKeyboard:)
                                                 name:UIKeyboardWillShowNotification
                                               object:nil];

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

    // ...
}


- (void)willShowKeyboard:(NSNotification *)notification
{
    [UIView setAnimationsEnabled:NO];
}

- (void)didShowKeyboard:(NSNotification *)notification
{
    [UIView setAnimationsEnabled:YES];
}

Возможно, он не дает прямого ответа на вопрос, так как сама клавиатура находится в основном пользовательском интерфейсе для моего примера, и кэширование для меня не вариант. Тем не менее, общая отзывчивость улучшается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...