2014-12-22 1 views
1

입력 필드 중 하나를 클릭하면 로그인 화면이 표시됩니다. 사용자 이름 또는 비밀번호) 키보드가 나타납니다. 그러나 그것이 일어날 때 모든 것이 왼쪽에서 오른쪽으로 움직입니다. 그래서 왼쪽에 커다란 공백이 있습니다. 내가 기대하는 바는 모든 것이 아래에서 위로 움직이는 것이다. 나는 이것이 정말로 합리적이되기를 바란다. 여기 내 코드는 다음과 같습니다.iPad - 목표 - C - 키보드 - 모든 것이 왼쪽에서 오른쪽으로 움직이며 위로부터 아래로 이동하지 않습니다.

- (void)animateTextField:(UITextField *) textField up: (BOOL) up; 
- (void)NavButtonPressed: (UIButton*)sender; 

- (void)NavButtonPressed: (UIButton*)sender 
{ 
    if([sender isEqual:navBarNextButton]) 
    { 
     [self.idTextField resignFirstResponder]; 
     [self.passwordTextField becomeFirstResponder]; 
     currentResponder = 1; 
     [self animateTextField:self.passwordTextField up:NO]; 
     [self animateTextField:self.passwordTextField up:YES]; 
     [navBarNextButton setEnabled:NO]; 
     [navBarPrevButton setEnabled:YES]; 

    } 
    else 
    { 
     [self.passwordTextField resignFirstResponder]; 
     [self.idTextField becomeFirstResponder]; 
     currentResponder = 0; 
     [self animateTextField:self.idTextField up:NO]; 
     [self animateTextField:self.idTextField up:YES]; 
     [navBarNextButton setEnabled:YES]; 
     [navBarPrevButton setEnabled:NO]; 
    } 
} 

- (void)animateTextField:(UITextField *) textField up: (BOOL) up 
{ 
    int movementDistance; 
    if(UIInterfaceOrientationIsLandscape(self.interfaceOrientation)) 
    { 
     if([textField isEqual:self.idTextField]) 
     { 
      [textfieldNavigatorView setFrame:CGRectMake(0.0f, (1024.0f/2.0f)-31.5f, 1024.0f, 45.0f)]; 
      movementDistance = 110; 
     } 
     else 
     { 
      [textfieldNavigatorView setFrame:CGRectMake(0.0f, (1024.0f/2.0f)-26.5f, 1024.0f, 45.0f)]; 
      movementDistance = 115; 
     } 
    } 
    else 
    {movementDistance = 0;} 

    const float movementDuration = 0.3f; 
    int movement=0; 
    if([self interfaceOrientation] == UIInterfaceOrientationLandscapeLeft) 
     movement = (up? -movementDistance : movementDistance); 
    if([self interfaceOrientation] == UIInterfaceOrientationLandscapeRight) 
     movement = (up? movementDistance : -movementDistance); 

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

    [UIView commitAnimations]; 
} 

누구든지 도움을 줄 수 있다면 정말 놀라실 것입니다. 내 프로젝트 장치가 가로 방향으로 만 설정됩니다.

답변

3

이전에 같은 문제가 있었지만 iOS 7 및 8에서는 다르게 작동합니다. 그래서이 문제를 처리하는 방법을 구현 : 당신은 그것을 호출 할 수 있습니다

- (void)keyboardHideShow:(UIView *)view shiftBy:(float)shiftAmount forState:(BOOL)state 
{ 
    float keyBoardOffset = shiftAmount; 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:0.3]; // if you want to slide up the view 
    [UIView setAnimationBeginsFromCurrentState:YES]; 
    UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; 
    CGRect rect = [[[UIApplication sharedApplication] keyWindow] bounds]; 
    if (state) 
    { 
     if ([[[UIDevice currentDevice] systemVersion] floatValue] < 8) 
     { 
      if (orientation == UIInterfaceOrientationLandscapeLeft) 
      { 
       rect.origin.x -= keyBoardOffset; 
      } 
      else 
      { 
       rect.origin.x += keyBoardOffset; 
      } 
     } 
     else 
     { 
      rect.origin.y -= keyBoardOffset; 
     } 
    } 
    view.frame = rect; 
    [UIView commitAnimations]; 
} 

좋아 :

[self keyboardHideShow:textfieldNavigatorView shiftBy:31.5 forState:true]; // For up 
[self keyboardHideShow:textfieldNavigatorView shiftBy:31.5 forState:false]; // For down 
+0

, 내 문제를 해결하는 올바른 경로에 저를 완벽한 대답 투입이,이 아니다 복사하여 붙여 넣기 답변. 나는 내 문제를 해결하면서 뭔가를 배웠다. – user979331

+0

@ user979331 : 귀하의 의견에 감사드립니다. 해피 코딩 !!! –

관련 문제