[ObjectiveC] Move view on textFieldDidBeginEditing

Nuova versione, del 5/12/2012:

[code lang=”java” autolinks=”false” collapse=”false” firstline=”1″ gutter=”true” htmlscript=”false” light=”false” padlinenumbers=”false” smarttabs=”true” tabsize=”4″ toolbar=”false”]- (BOOL)textFieldShouldReturn:(UITextField *)textField {
  [textField resignFirstResponder];
  [self moveView:0];
  return YES;
}

– (void) textFieldDidBeginEditing:(UITextField *)textField {
  [self moveView:-100];
}

– (void) moveView:(int)y {
  [UIView animateWithDuration:0.25 animations:^{
    CGRect rect = self.view.frame;
    rect.origin.y = y;
    self.view.frame = rect;
  }];
}[/code]


Può capitare di avere un textfield in basso nella view
Come ben sapete, la tastiera che appare, copre mezzo schermo, e questo può essere noioso.

Lo si capisce meglio dall’esempio in foto:

 

Ecco qui, un trick per evitare questo problemino…

[code lang=”java” autolinks=”false” collapse=”false” firstline=”1″ gutter=”true” htmlscript=”false” light=”false” padlinenumbers=”false” smarttabs=”true” tabsize=”4″ toolbar=”false”]int verticalOffset;

#pragma mark TEXTFIELD_TRICKS

– (BOOL) textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];

if (verticalOffset != 0) {
[self moveView: -verticalOffset + 200];
verticalOffset = 0;
}
return YES;
}

– (void) textFieldDidBeginEditing:(UITextField *)textField {
int wantedOffset = textField.frame.origin.y – 200;
if ( wantedOffset < 0 ) {
wantedOffset = 0;
}
if ( wantedOffset != verticalOffset ) {
[self moveView: wantedOffset – verticalOffset];
verticalOffset = wantedOffset;
}
}

– (void) moveView:(int)offset {
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3];

CGRect rect = self.view.frame;
rect.origin.y -= offset;
rect.size.height += offset;

VIEW_TO_MOVE.frame = rect;

[UIView commitAnimations];
}[/code]

Adesso la vostra view si sposterà in alto, per poi ritornare a casa!
Ovviamente offset e impostazioni sono personalizzabilissime.


Alberto Pasca
Latest posts by Alberto Pasca (see all)