iOS - How can I preload the keyboard?

后端 未结 4 1581
滥情空心
滥情空心 2021-01-30 13:43

The Problem

In most iPhone apps, there\'s a quite a bit of delay the first time that the keyboard is presented (presumably creating the keyboard takes quite a bit of o

相关标签:
4条回答
  • 2021-01-30 13:53

    Once a user complain my app of the slow loading keyboard. Here is a little trick to disable the keyboard 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];
    }
    

    It may not answer the question directly, as the keyboard itself is in the main UI for my example and caching is not the option to me. Nevertheless, the overall responsiveness is improved.

    0 讨论(0)
  • 2021-01-30 14:00

    making the textfield the firstResponder and then resigning it in the viewdidload.. this seems to work with no lag when the keyboard is loaded again...

    - (void)viewDidLoad
    {
        [super viewDidLoad];
    
        [textField becomeFirstResponder];
        [textField resignFirstResponder];
            // Do any additional setup after loading the view, typically from a nib.
    }
    
    0 讨论(0)
  • 2021-01-30 14:01

    UIResponder+KeyboardCache was written to address this exact problem.

    From that project's readme:

    This category on UIResponder gives you a simple method +cacheKeyboard so that you can control when this caching work is done. For example, if you are loading some data from a server, then you could invoke this during that downtime. There is another method +cacheKeyboard: that takes an optional BOOL value. Passing YES to this method causes the cache invocation to happen on the next runloop. So, if you performed an animation just before calling this method it would not interrupt that animation.

    0 讨论(0)
  • 2021-01-30 14:01

    Here's what I do:

    - (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

    0 讨论(0)
提交回复
热议问题