Trouble shooting becomeFirstResponder not showing keyboard for some users

14,535

Solution 1

The textview has not finished being drawn by the time you try to make it the first responder.

You can try animating the appearance and setting the first responder in the completion block.

[UIView animateWithDuration:0.0 animations:^{
   [view addSubview:textView];
} completion:^(BOOL finished){
   [textView becomeFirstResponder];
}];

Solution 2

I called becomeFirstResponder later by this line:

[self.searchBar performSelector:@selector(becomeFirstResponder) 
                     withObject:nil 
                     afterDelay:0.1f];

It worked for me. Hope this help.

Solution 3

As of iOS8, calling becomeFirstResponder on a UITextView doesn't show the keyboard for me on the iOS simulator, but it does on the real device. So be sure to check it with an actual device. This doesn't happen on iOS7 though.

Share:
14,535

Related videos on Youtube

JOG
Author by

JOG

Updated on June 04, 2022

Comments

  • JOG
    JOG about 2 years

    I got a TextView that is supposed to show upon a button press, and let the user enter text through the keyboard.

    - (IBAction) changeName {
    
        changeNameBtn.hidden = YES;
        backBtn.hidden = YES;
    
        usernameLabel.hidden = NO;
        inputTextField.hidden = NO;
        [inputTextField becomeFirstResponder]; // to show keyboard
    }
    

    This works fine for most of us.

    But the Keyboard does not show for some of my testers, at a geographically remote location. How to trouble shoot this? And what could be the reason for the different behavior of our devices? It works fine for me and everybody else. We all use the same devices (iPod, iOS 4.1 - 5.1).

    First thing I tried did not work:

    I guessed that the inputTextField did in some way not become visible in time, before becomeFirstResponder was fired, so I added setNeedsDisplay as I thought that would force an update.

    [inputTextField setNeedsDisplay];
    [inputTextField becomeFirstResponder];
    

    Second thing I tried did not work:

    if([inputTextField canBecomeFirstResponder]){
        [inputTextField becomeFirstResponder];
    }
    

    Third thing I tried is a workaround, requiring the unlucky user to press the field:

    - (IBAction) inputTextFieldTouch {
        [inputTextField becomeFirstResponder];
    }
    

    This workaround works, but there must be a better way. Please enlighten me about what I am doing wrong! :) And how to approach issues like this without being able to duplicate it myself?

  • chedabob
    chedabob over 9 years
    Have you pressed Cmd + Shift + K to use your computer's keyboard? That shows and hides the Simulator's keyboard for me.
  • JOG
    JOG over 9 years
    All my testers use actual devices, including the ones where the keyboard did not show. As the question states, "We all use the same devices (iPod, iOS 4.1 - 5.1)".
  • Ilya Muradymov
    Ilya Muradymov over 7 years
    actually works better than answer, that is marked correct.
  • JOG
    JOG over 7 years
    better, how, Ilya?
  • Aviram Netanel
    Aviram Netanel over 5 years
    Thank you for saving me a lot of time trying to figure this out :D