iOS - 如何预加载键盘?

Jor*_*ith 39 performance objective-c uikeyboard ios

问题

在大多数iPhone应用程序中,第一次出现键盘时会出现相当长的延迟(可能是创建键盘需要相当多的功能,即使在iPhone 4上也是如此).

大多数人看起来都很好.我不是,它真的让我感到烦恼 - 以及我的应用程序呈现方式,用户会非常困惑,他们第一次点击文本字段时几秒钟都没有发生任何事情.


我试过的

谷歌搜索引出了一个解决方案 - 不幸的是,从iOS 4开始这是无效的(见这里).

我不希望这个解决方案很容易找到,如果我可以直接给我一个赏金.如果有人想出解决方案,我会非常激动.解决方案需要做的就是在用户不知情的情况下加载键盘.


所以..

任何想法都表示赞赏.完整的工作代码(适用于iOS 4和5)值得赏心悦目(即使赏金必须在以后出现!).

如果找到解决方案,我计划创建一个自包含的"KeyboardPreloader"类,人们可以将其放入他们的项目中,并使用一行代码预加载键盘:)

cbo*_*wns 30

编写UIResponder + KeyboardCache是为了解决这个问题.

从该项目的自述文件:

此类别UIResponder为您提供了一种简单的方法,+cacheKeyboard以便您可以控制何时完成此缓存工作.例如,如果要从服务器加载某些数据,则可以在该停机期间调用此数据.还有另一种方法+cacheKeyboard:采用可选BOOL值.将YES传递给此方法会导致缓存调用在下一个 runloop 上发生.因此,如果您在调用此方法之前执行了动画,则不会中断该动画.

  • 哇它确实有效!如果只有你在我的赏金还在的时候... ...谢谢! (2认同)

Ank*_*ava 12

使textfield成为firstResponder,然后在viewdidload中将其重新签名..当键盘再次加载时,这似乎没有延迟...

- (void)viewDidLoad
{
    [super viewDidLoad];

    [textField becomeFirstResponder];
    [textField resignFirstResponder];
        // Do any additional setup after loading the view, typically from a nib.
}
Run Code Online (Sandbox Code Playgroud)


Vad*_*off 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];
}
Run Code Online (Sandbox Code Playgroud)

UITextField初始键盘动画的超级慢延迟/延迟