2015-01-27 2 views
1

Я написал приведенную ниже логику для перемещения вверх, когда textfiled начинает редактирование. Он работает отлично в iOS 7, но он не работает в iOS 8.UIView в iOS 8 Не переходите, когда начинается UITextFiled Editing

Код:

-(void)viewDidLoad 
{ 
    _leagalName.delegate = self; 
    _phoneNumber.delegate = self; 
    _email.delegate = self; 
    _contactName.delegate = self; 
    _contactNumber.delegate = self; 
    _password.delegate = self; 
    _confirmPassword.delegate = self; 
} 

-(void)animateTextField:(UITextField*)textField up:(BOOL)up 
{ 
    const float movementDuration = 0.3f; // tweak as needed 
    int movement = (up ? movementDistance : -movementDistance); 
    [UIView beginAnimations: @"animateTextField" context: nil]; 
    [UIView setAnimationBeginsFromCurrentState: YES]; 
    [UIView setAnimationDuration: movementDuration]; 
    self.sampleView.frame = CGRectOffset(self.sampleView.frame, 0, movement); 
    [UIView commitAnimations]; 
} 

-(void)textFieldDidBeginEditing:(UITextField *)textField 
{ 
    if([textField isEqual:_leagalName]) 
    { 
    movementDistance = 0; 
    [self animateTextField:textField up:YES]; 
    } 
    else if([textField isEqual:_phoneNumber]) 
    { 
    movementDistance = 0; 
    [self animateTextField:textField up:YES]; 
    } 
    else if([textField isEqual:_email]) 
    { 
    movementDistance = -40; 
    [self animateTextField:textField up:YES]; 
    } 
    else if([textField isEqual:_contactName]) 
    { 
    movementDistance = -80; 
    [self animateTextField:textField up:YES]; 
    } 
    else if([textField isEqual:_contactNumber]) 
    { 
    movementDistance = -110; 
    [self animateTextField:textField up:YES]; 
    } 
    else if([textField isEqual:_password]) 
    { 
    movementDistance = -140; 
    [self animateTextField:textField up:YES]; 
    } 
    else if([textField isEqual:_confirmPassword]) 
    { 
    movementDistance = -170; 
    [self animateTextField:textField up:YES]; 
    } 
} 
- (void)textFieldDidEndEditing:(UITextField *)textField 
    { 
    [self animateTextField:textField up:NO]; 
    } 
- (BOOL)textFieldShouldReturn:(UITextField *)textField 
    { 
    [textField resignFirstResponder]; 
    return YES; 
    } 

может кто-нибудь объяснить, как я могу двигаться взгляд вверх прошивкой 8.

+0

Вы взяли' делегата textField' в ...? –

+0

ДА. он работает в iOS 7. Я уже установил делегат. – user3825276

+0

Вы используете автоматическую компоновку? При использовании Auto-Layout лучше перемещать представления, используя ограничения вместо фреймов. – YogevSitton

ответ

1

в iOS8, не рекомендуется менять кадр во время анимации для случая автоматической компоновки. Обычный метод, используемый большинством разработчиков, будет обновлять ограничения соответственно в вашем блоке анимации.

Если вы все еще хотите попробовать установленный метод рамки, возможно, вы можете отключить автоматическую компоновку и попробовать.

+0

Да. Работает. он работает после сброса симулятора. – user3825276

0

Пожалуйста, используйте следующие методы обновления вы УИ

- (void)keyboardDidShow:(NSNotification *)note 
{ 
[UIView animateWithDuration:0.5f animations:^ { 
    if([super isIpad]){ 

      self.view.frame = CGRectMake(0, -350, 768, 1024); 

    } 
    else{ 
      self.view.frame = CGRectMake(0, -275, 320, 568); 

     } 
}]; 
} 
-(void)keyboardDidhide:(NSNotification *)note 
{ 


[UIView animateWithDuration:0.5f animations:^ { 
    if([super isIpad]){ 

      self.view.frame = CGRectMake(0, 0, 768, 1024); 

    } 
    else{ 

      self.view.frame = CGRectMake(0, 0, 320, 568); 

    } 
}]; 
} 

помните, что я использую [UIWindow sharedWindow] обратить мое перо, вы Кашицу использовать размер экрана и, во-вторых, пожалуйста, добавьте следующий код в методе viewDidLoad.

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];

`[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidhide:) name:UIKeyboardDidHideNotification object:nil]; 

`

Смежные вопросы