在大多数iPhone应用程序中,第一次出现键盘时会出现相当长的延迟(假设创建键盘需要相当多的功能,即使在iPhone 4上也是如此)。
大多数人对此都很满意。我不是,它真的让我感到烦恼 - 而且我的应用程序呈现方式,用户会非常困惑,当他们第一次点击文本字段时,几秒钟内没有任何事情发生。
谷歌搜索提出了一个解决方案 - 不幸的是,从iOS 4(see here)开始这是无效的。
我不认为这个解决方案很容易找到,如果我可以立即给予这个奖励,我会的。如果有人想出解决方案,我会非常激动。解决方案需要做的就是在用户不知情的情况下加载键盘。
任何想法都表示赞赏。完整的,有效的代码(适用于iOS 4和5)值得赏心悦目(即使赏金必须在以后出现!)。
如果找到解决方案,我计划创建一个自包含的“KeyboardPreloader”类,人们可以将其放入他们的项目中,并使用一行代码预加载键盘:)
答案 0 :(得分:30)
UIResponder+KeyboardCache是为了解决这个问题。
从该项目的自述文件:
UIResponder
上的此类别为您提供了一个简单的方法+cacheKeyboard
,以便您可以控制何时完成此缓存工作。例如,如果要从服务器加载某些数据,则可以在该停机期间调用此数据。另一种方法+cacheKeyboard:
采用可选的BOOL
值。将YES传递给此方法会导致高速缓存调用在 next runloop上发生。因此,如果您在调用此方法之前执行动画,则不会中断该动画。
答案 1 :(得分:12)
将textfield作为firstResponder,然后在viewdidload中将其重新签名..这似乎在没有延迟时再次加载键盘......
- (void)viewDidLoad
{
[super viewDidLoad];
[textField becomeFirstResponder];
[textField resignFirstResponder];
// Do any additional setup after loading the view, typically from a nib.
}
答案 2 :(得分:7)
这就是我的所作所为:
- (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];
}
Super slow lag/delay on initial keyboard animation of UITextField
答案 3 :(得分:0)
一旦用户抱怨慢速加载键盘的my app。这是禁用键盘动画的一个小技巧:
- (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中,而缓存不是我的选择。然而,整体响应能力得到改善。