user1302602
user1302602

Reputation: 419

Push view up when keyboard shown

I need to push the entire up (it has scrollview) when keyboard shown but can't seem to get it working with this code. All the code being hit but it just doesn't push up the view. I am following the example here. http://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html#//apple_ref/doc/uid/TP40009542-CH5-SW7

    - (void)registerForKeyboardNotifications
{
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWasShown:)
                                                 name:UIKeyboardDidShowNotification object:nil];

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWillBeHidden:)
                                                 name:UIKeyboardWillHideNotification object:nil];

}

// Called when the UIKeyboardDidShowNotification is sent.
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];

    return YES;
}


- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    self.activeField = textField;
}

- (void)textFieldDidEndEditing:(UITextField *)textField
{
    self.activeField = nil;
}
- (void)keyboardWasShown:(NSNotification*)aNotification
{
    NSDictionary* info = [aNotification userInfo];
    CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

    UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0);
    self.scrollView.contentInset = contentInsets;
    self.scrollView.scrollIndicatorInsets = contentInsets;

    // If active text field is hidden by keyboard, scroll it so it's visible
    // Your application might not need or want this behavior.
    CGRect aRect = self.frame;
    aRect.size.height -= kbSize.height;
    if (!CGRectContainsPoint(aRect, self.activeField.frame.origin) ) {
        CGPoint scrollPoint = CGPointMake(0.0, self.activeField.frame.origin.y-kbSize.height);
        [self.scrollView setContentOffset:scrollPoint animated:YES];
    }
}

// Called when the UIKeyboardWillHideNotification is sent
- (void)keyboardWillBeHidden:(NSNotification*)aNotification
{
    UIEdgeInsets contentInsets = UIEdgeInsetsZero;
    self.scrollView.contentInset = contentInsets;
    self.scrollView.scrollIndicatorInsets = contentInsets;
}

Upvotes: 1

Views: 4255

Answers (3)

hpp
hpp

Reputation: 619

you can use scrollView in your view. then put all other subviews in the scrollView and then set the content offset of scrollView in "textfieldShouldBeginEditing" method.

[scrollView setContentOffset:CGPointMake(0,160)]; // this is just an example

hope this will help you.

Upvotes: 1

Ilario
Ilario

Reputation: 6079

I imagine that the keyboard appears when the user clicks on a textfield right? you have to use the method of the delegate for the UITextField.

in your viewController.h add UITextFieldDelegate and in your .m insert:

   - (void)textFieldDidBeginEditing:(UITextField *)textField
 {
  [self animateTextField: textField up: YES];
 }


  - (void)textFieldDidEndEditing:(UITextField *)textField
 {
   [self animateTextField: textField up: NO];
 }

 - (void) animateTextField: (UITextField *)textField up: (BOOL) up
{
const int movementDistance = 140; // tweak as needed
const float movementDuration = 0.3f; // tweak as needed

int movement = (up ? -movementDistance : movementDistance);

[UIView beginAnimations: @"anim" context: nil];
[UIView setAnimationBeginsFromCurrentState: YES];
[UIView setAnimationDuration: movementDuration];
self.view.frame = CGRectOffset(self.view.frame, 0, movement);
[UIView commitAnimations];
}

add also these methods:

 -(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
   [yourTextField resignFirstResponder];
}

-(BOOL) textFieldShouldReturn:(UITextField *)textField {
 [yourTextField resignFirstResponder];
 Return YES;
}

Upvotes: 3

Abdullah Shafique
Abdullah Shafique

Reputation: 6918

I had the same problem! Instead I decided to use a tableview. Insert your UITextFields in the TableViewCells and it will scroll up automatically when keyboard comes up!

Upvotes: 0

Related Questions