iOS – 如何预加载键盘?
问题
在大多数iPhone应用程序中,第一次出现键盘时会有相当多的延迟(大概创build键盘需要相当多的时间,即使在iPhone 4上也是如此)。
大多数人似乎可以这样做。 我不是,它真的让我感到困惑 – 而且我的应用程序呈现的方式,用户会非常困惑,第一次点击文本字段时没有任何反应。
我所试过的
谷歌search带来了一个解决scheme – 不幸的是,这是无效的iOS 4( 见这里 )。
我不希望这个解决scheme很容易find,如果我可以立刻给我一个奖励。 如果有人想出一个解决scheme,我会非常兴奋。 所有的解决scheme需要做的就是加载键盘,而用户不知道。
所以..
任何想法都表示赞赏。 完整的工作代码(对于iOS 4和5)是值得的(即使赏金必须迟到!)。
如果find了一个解决scheme,我打算创build一个自包含的“KeyboardPreloader”类,用户可以将其放入项目中,并用一行代码预加载键盘:)
编写UIResponder + KeyboardCache来解决这个确切的问题。
从该项目的自述文件:
UIResponder
上的这个类别为您提供了一个简单的方法+cacheKeyboard
以便您可以控制何时完成此caching工作。 例如,如果您正在从服务器加载一些数据,则可以在停机期间调用这些数据。 还有另外一个方法+cacheKeyboard:
它带有一个可选的BOOL
值。 将YES传递给此方法会导致caching调用在下一个 runloop上发生。 所以,如果您在调用此方法之前执行animation,则不会中断该animation。
使textfield firstResponder,然后在viewdidload resigning它..这似乎是没有滞后时,键盘再次加载…
- (void)viewDidLoad { [super viewDidLoad]; [textField becomeFirstResponder]; [textField resignFirstResponder]; // Do any additional setup after loading the view, typically from a nib. }
这就是我所做的:
- (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的初始键盘animation超级慢速滞后/延迟
一旦用户抱怨我的应用程序缓慢加载键盘。 这是一个小技巧来禁用键盘animation:
- (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]; }
它可能不会直接回答这个问题,因为键盘本身就在我的例子的主UI中,而caching对我来说不是选项。 尽pipe如此,整体的反应速度却有所提高。