2016-02-04 38 views
0

我正在制作一个在显示键盘时将视图(当iPone 4s/5/5c/5s)向上移动的应用程序。然而,当我使用数字键入某些东西时,它会触发视图回落。 textField:shouldChangeCharactersInRange:replacementString的代码更改文本,然后将其分配回教科书。向UITextField赋值时UIView向下移动

- (BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 

NSString* totalString = [NSString stringWithFormat:@"%@%@",textField.text,string]; 
if(textField.tag==102) { 
    if (([textField.text isEqualToString:@"0"]) && (textField.text.length == 1)) { 
     textField.text = @""; 
     NSLog(@"Zero Encountered"); 
     return NO; 
    } 
    if (range.length == 1) { 
     // Delete button was hit.. so tell the method to delete the last char. 
     textField.text = [_iOSApiService_model formatPhoneNumber:totalString deleteLastChar:YES]; 
    } else { 
     textField.text = [_iOSApiService_model formatPhoneNumber:totalString deleteLastChar:NO]; 
    } 
    return YES; 
} 
return YES; 
} 

-(void) keyboardWasShown:(NSNotification *)notification { 
//The keyboard was shown, move movableView objects UP 
NSLog(@"value of _keyboardshownUp is %i",_keyboardshownUp); 
if (_keyboardshownUp == 1) { 
    //Keyboard was already shown 
} else { 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:0.5]; 
    //This will move the frame back to place 

    _movableView.frame = CGRectMake(_movableView.frame.origin.x, 
            _movableView.frame.origin.y+_variableMove, 
            _movableView.frame.size.width, 
            _movableView.frame.size.height); 
    [UIView commitAnimations]; 
    NSLog(@"Move View up"); 
    _keyboardshownUp = 1; 
} 
} 

-(void) keyboardWillHide:(NSNotification *)notification { 
//The keyboard was shown, move movableView objects down 

NSLog(@"value of _keyboardshownUp is %i",_keyboardshownUp); 
if (_keyboardshownUp == 0) { 
    //Keyboard was already hiden 
} else { 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:0.5]; 
    //This will move the frame back to place 
    _movableView.frame = CGRectMake(_movableView.frame.origin.x, 
            _movableView.frame.origin.y-_variableMove, 
            _movableView.frame.size.width, 
            _movableView.frame.size.height); 
    [UIView commitAnimations]; 
    NSLog(@"Move View Down"); 
    _keyboardshownUp = 0; 
} 
} 

我连同UIKeyboardWillHideNotificationUIKeyboardDidShowNotification这样做。如果我禁用textField:shouldChangeCharactersInRange:replacementString那么没有问题。但是,当我为“问题”UITextField分配一个值时,就好像键盘被隐藏(即使它不是)并且Main UIView恢复到其原始位置,因此键盘遮挡视图。请帮忙!!!

回答

2

最近我面对这些问题太多了,这就是为什么我要创建一个库来面对这种情况。看看KeyboardAnimator。希望它符合你的要求。

+0

这是一个很好的事情:)问题是,应该ChangeCharactersInRange为文本字段textField.text分配一个值,它会降低视图,然后阻止文本框对用户可见。你的榜样是否消除了这个?没有机会检查它,但:)谢谢你SOOOOOOO很多! –

+0

只有当键盘消失时,我才会将视图动画化。那是你想要的吗?在键盘动画工具中,没有将textfield委托设置为主库。 –

+0

在我的代码中,如果我删除textfield.text =,我不会遇到视图下降的问题。当我改变对象的值时,它会以某种方式触发改变。当您使用textField.text设置textField的文本值时,我也对此感到困惑 –

0

要移动您的UI控制器,将值分配给UITextField时,请使用“IQKeybordManager”库来解决这种情况。 IQKeybordManager遇到了iPhone键盘向上滑动并覆盖UITextField/UITextView的问题。 IQKeyboardManager允许您防止键盘向上滑动并覆盖UITextField/UITextView,而无需输入任何代码,也无需其他设置。要使用IQKeyboardManager,只需将源文件添加到项目中即可。