Search code examples
cocoa-touchioskeyboarduitextfielddelegate

Move view when so that keyboard does not hide text field


In my app, when I click on a text field, the keyboard hides it. Please help me -- how can I move my view up when I click on the text field. I'm using this code in textFieldDidBeginEditing:

self.tableView.scrollIndicatorInsets = UIEdgeInsetsMake(0, 0, 216, 0);
self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 216, 0);

but it doesn't work.


Solution

  • You can do the following, but first make sure you've set the UITextField delegate to your self and

    #define kOFFSET_FOR_KEYBOARD 350;
    

    at the top. This is how far you want the view to be shifted

    //method to move the view up/down whenever the keyboard is shown/dismissed
    
    -(void)setViewMovedUp:(BOOL)movedUp
    {
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDuration:0.3]; // if you want to slide up the view
        [UIView setAnimationBeginsFromCurrentState:YES];
    
        CGRect rect = self.view.frame;
        if (movedUp)
        {
            // 1. move the view's origin up so that the text field that will be hidden come above the keyboard 
            // 2. increase the size of the view so that the area behind the keyboard is covered up.
    
            if (rect.origin.y == 0 ) {
                rect.origin.y -= kOFFSET_FOR_KEYBOARD;
                //rect.size.height += kOFFSET_FOR_KEYBOARD;
            }
    
        }
        else
        {
            if (stayup == NO) {
                rect.origin.y += kOFFSET_FOR_KEYBOARD;
                //rect.size.height -= kOFFSET_FOR_KEYBOARD;
            }
        }
        self.view.frame = rect; 
        [UIView commitAnimations];
    }
    
    
    - (void)keyboardWillHide:(NSNotification *)notif {
        [self setViewMovedUp:NO];
    }
    
    
    - (void)keyboardWillShow:(NSNotification *)notif{
        [self setViewMovedUp:YES];
    }
    
    
    - (void)textFieldDidBeginEditing:(UITextField *)textField {
        stayup = YES;
        [self setViewMovedUp:YES];
    }
    
    
    - (void)textFieldDidEndEditing:(UITextField *)textField {
        stayup = NO;
        [self setViewMovedUp:NO];
    }
    
    - (void)viewWillAppear:(BOOL)animated
    {
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) 
                                                     name:UIKeyboardWillShowNotification object:self.view.window];
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) 
                                                     name:UIKeyboardWillHideNotification object:self.view.window];
    }
    
    - (void)viewWillDisappear:(BOOL)animated
    {
        // unregister for keyboard notifications while not visible.
        [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];
        [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];
    }