IOS - Как я могу предварительно загрузить клавиатуру?
Проблема
В большинстве приложений для iPhone в первый раз, когда клавиатура представлена (по-видимому, создание клавиатуры занимает довольно много времени, даже на iPhone 4).
Большинство людей с этим согласны. Я не так, меня это очень беспокоит - и как мое приложение представлено, пользователи будут очень смущены, что ничего не происходит в течение нескольких секунд, когда они впервые нажимают на текстовое поле.
Что я пробовал
Googling вызывает одно решение - к сожалению, это недействительно с iOS 4 (см. здесь).
Я не ожидаю, что решение будет легко найти, если я смогу наложить щедрость на это сразу. Я был бы очень рад, если бы кто-то понял решение. Все, что нужно сделать, - это загрузить клавиатуру без уведомления пользователя.
Итак..
Любые идеи приветствуются. Полный, рабочий код (для iOS 4 и 5) - это награда (даже если щедрость должна прийти позже!).
Если решение найдено, я планирую создать автономный класс "KeyboardPreloader", который люди могут занести в свой проект, и предварительно загрузите клавиатуру одной строкой кода:)
Ответы
Ответ 1
UIResponder + KeyboardCache был написан для решения этой проблемы.
Из этого проекта readme:
Эта категория на UIResponder
дает вам простой метод +cacheKeyboard
, чтобы вы могли контролировать, когда эта работа кэширования завершена. Например, если вы загружаете некоторые данные с сервера, вы можете вызвать это во время этого простоя. Существует еще один метод +cacheKeyboard:
, который принимает необязательное значение BOOL
. Передача YES этому методу приводит к тому, что обращение к кешу произойдет на следующей runloop. Итак, если вы выполняли анимацию непосредственно перед вызовом этого метода, она не прерывала бы эту анимацию.
Ответ 2
создавая текстовое поле firstResponder, а затем сбрасывая его в viewdidload.. это, похоже, работает без задержки, когда клавиатура снова загружается...
- (void)viewDidLoad
{
[super viewDidLoad];
[textField becomeFirstResponder];
[textField resignFirstResponder];
// Do any additional setup after loading the view, typically from a nib.
}
Ответ 3
Вот что я делаю:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Preloads keyboard so there no lag on initial keyboard appearance.
UITextField *lagFreeField = [[UITextField alloc] init];
[self.window addSubview:lagFreeField];
[lagFreeField becomeFirstResponder];
[lagFreeField resignFirstResponder];
[lagFreeField removeFromSuperview];
}
Супер медленное отставание/задержка при начальной анимации клавиатуры UITextField
Ответ 4
Как только пользователь жалуется мое приложение медленной загрузочной клавиатуры. Вот небольшой трюк, чтобы отключить анимацию клавиатуры:
- (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];
}
Он может не отвечать на вопрос напрямую, поскольку сама клавиатура находится в основном пользовательском интерфейсе для моего примера, и кэширование - это не вариант для меня. Тем не менее, общая отзывчивость улучшается.