ioscocoa-touchuikeyboarduimodalpresentationstyle

iOS 8 keyboard hides my textview


I have a UIViewController presented using self.accountViewController.modalPresentationStyle = UIModalPresentationFormSheet; and now in iOS 8 the last UITextView is hidden from the keyboard when it will pushed up. How to avoid It?


Solution

  • @Oleg's solution is good but it doesn't take into consideration keyboard changes in size while its already showing.. also, he hardcoded the animation duration and a few other parameters. See my solution below:

    Add an observer of UIKeyboardWillChangeFrameNotification to the viewDidLoad

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardFrameWillChange:) name:UIKeyboardWillChangeFrameNotification object:nil];
    

    And then add the method:

    - (void)keyboardFrameWillChange:(NSNotification *)notification
    {
        CGRect keyboardEndFrame = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
        CGRect keyboardBeginFrame = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue];
        UIViewAnimationCurve animationCurve = [[[notification userInfo] objectForKey:UIKeyboardAnimationCurveUserInfoKey] integerValue];
        NSTimeInterval animationDuration = [[[notification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] integerValue];
    
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:animationDuration];
        [UIView setAnimationCurve:animationCurve];
    
        CGRect newFrame = self.view.frame;
        CGRect keyboardFrameEnd = [self.view convertRect:keyboardEndFrame toView:nil];
        CGRect keyboardFrameBegin = [self.view convertRect:keyboardBeginFrame toView:nil];
    
        newFrame.origin.y -= (keyboardFrameBegin.origin.y - keyboardFrameEnd.origin.y);
        self.view.frame = newFrame;
    
        [UIView commitAnimations];
    }
    

    Don't forget to remove the keyboard observer in both viewDidUnload and in Dealloc.