Iphone 是否在键盘上方显示所有界面方向的文本字段?
实际上,在我的iPhone应用程序中,为了显示键盘上方的文本字段,我使用了以下代码来提升视图。我的应用程序支持所有四种接口方向。我使用以下代码来提升视图。这里的问题是,它只适用于纵向。有没有办法在所有四个方向上执行正确的提升Iphone 是否在键盘上方显示所有界面方向的文本字段?,iphone,Iphone,实际上,在我的iPhone应用程序中,为了显示键盘上方的文本字段,我使用了以下代码来提升视图。我的应用程序支持所有四种接口方向。我使用以下代码来提升视图。这里的问题是,它只适用于纵向。有没有办法在所有四个方向上执行正确的提升 static const CGFloat KEYBOARD_ANIMATION_DURATION = 0.3; static const CGFloat MINIMUM_SCROLL_FRACTION = 0.2; static const CGFl
static const CGFloat KEYBOARD_ANIMATION_DURATION = 0.3;
static const CGFloat MINIMUM_SCROLL_FRACTION = 0.2;
static const CGFloat MAXIMUM_SCROLL_FRACTION = 0.8;
static const CGFloat PORTRAIT_KEYBOARD_HEIGHT = 216;
static const CGFloat LANDSCAPE_KEYBOARD_HEIGHT = 162;
- (void)textFieldDidBeginEditing:(UITextField *)textField {
UIInterfaceOrientation orientation = [Globals getUIInterfaceOrientation];//[[UIApplication sharedApplication] statusBarOrientation];
CGRect textFieldRect = [self.view.window convertRect:textField.bounds fromView:textField];
CGRect viewRect = [self.view.window convertRect:self.view.bounds fromView:self.view];
CGFloat midline = textFieldRect.origin.y + 0.5 * textFieldRect.size.height;
CGFloat numerator = midline - viewRect.origin.y - MINIMUM_SCROLL_FRACTION * viewRect.size.height;
CGFloat denominator = (MAXIMUM_SCROLL_FRACTION - MINIMUM_SCROLL_FRACTION) * viewRect.size.height;
CGFloat heightFraction = numerator / denominator;
if (heightFraction < 0.0) {
heightFraction = 0.0;
}
else if (heightFraction > 1.0) {
heightFraction = 1.0;
}
if (orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown)
animatedDistance = floor(PORTRAIT_KEYBOARD_HEIGHT * heightFraction);
else
animatedDistance = floor(LANDSCAPE_KEYBOARD_HEIGHT * heightFraction);
CGRect viewFrame = self.view.frame;
viewFrame.origin.y -= animatedDistance;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION];
[self.view setFrame:viewFrame];
[UIView commitAnimations];
}
- (void)textFieldDidEndEditing:(UITextField *)textField{
CGRect viewFrame = self.view.frame;
viewFrame.origin.y += animatedDistance;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION];
[self.view setFrame:viewFrame];
[UIView commitAnimations];
}
静态常量CGFloat键盘\u动画\u持续时间=0.3;
静态常数CGFloat最小滚动分数=0.2;
静态常数CGFloat最大滚动分数=0.8;
静态常数CGFloat纵向键盘高度=216;
静态常数CGFloat横向键盘高度=162;
-(无效)textFieldDidBeginEditing:(UITextField*)textField{
UIInterfaceOrientation方向=[Globals getUIInterfaceOrientation];//[[UIApplication sharedApplication]statusBarOrientation];
CGRect textFieldRect=[self.view.window convertRect:textField.bounds fromView:textField];
CGRect viewRect=[self.view.window convertRect:self.view.bounds fromView:self.view];
CGFloat midline=textFieldRect.origin.y+0.5*textFieldRect.size.height;
CGFloat分子=中线-viewRect.origin.y-最小滚动分数*viewRect.size.height;
CGFloat分母=(最大滚动分数-最小滚动分数)*viewRect.size.height;
CGFloat heightFraction=分子/分母;
如果(高度分数<0.0){
高度分数=0.0;
}
否则如果(高度分数>1.0){
高度分数=1.0;
}
如果(方向==UIInterfaceOrientationGraphital | |方向==UIInterfaceOrientationGraphitalUpsideDown)
动画距离=地板(纵向\键盘\高度*高度分数);
其他的
动画距离=地板(横向键盘高度*高度分数);
CGRect viewFrame=self.view.frame;
viewFrame.origin.y-=动画距离;
[UIView beginAnimations:nil上下文:NULL];
[UIView setAnimationBeginsFromCurrentState:是];
[UIView设置动画持续时间:键盘动画持续时间];
[self.view setFrame:viewFrame];
[UIView委员会];
}
-(void)textfielddidediting:(UITextField*)textField{
CGRect viewFrame=self.view.frame;
viewFrame.origin.y+=动画距离;
[UIView beginAnimations:nil上下文:NULL];
[UIView setAnimationBeginsFromCurrentState:是];
[UIView设置动画持续时间:键盘动画持续时间];
[self.view setFrame:viewFrame];
[UIView委员会];
}
您可以尝试将文本字段的inputAccessoryView
属性设置为其自身。我没有尝试过,但理论上,它应该使文本字段连接到键盘,从而始终显示:
textField.inputAccessoryView = textField;
请看这篇文章。。[连结][1][1]: