2012-09-21 26 views
0

我在我的应用程序中使用滚动视图,因为当我点击dob文本字段时,datepicker视图显示为弹出窗口,在进一步当我点击连续文本字段时,视图是就像在图像中,在这里我的代码,键盘可见性背景调整大小

对于日期选择器的可见性。

UIDatePicker pop up after UIButton is pressed

对于键盘方向

- (void)textFieldDidBeginEditing:(UITextField *)textField 
{ 
[dob resignFirstResponder]; 
if (txt1.textColor == [UIColor lightGrayColor]) { 
    txt1.text = @""; 
    txt1.textColor = [UIColor blackColor]; 
} 
if ([textField isEqual:dob]) 
{ 
    [self but]; 
    [dob resignFirstResponder]; 
    //return NO; 
} 
//[self animateTextField:textField up:YES]; 
[textField setClearButtonMode:UITextFieldViewModeWhileEditing]; 
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.1 * 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; 
} 
UIInterfaceOrientation orientation = 
[[UIApplication sharedApplication] statusBarOrientation]; 
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 
{ 

//[self animateTextField:textField up:NO]; 
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];  
} 
- (BOOL)textFieldShouldReturn:(UITextField *)textField 
{ 
return [textField resignFirstResponder]; 
return [txt1 resignFirstResponder]; 
} 

任何一个可以帮我清除。 enter image description here

回答

0

当键盘出现时,您需要调整您的滚动视图的大小。在viewDidLoad中

NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; 
    [center addObserver:self selector:@selector(keyboardShown) name:UIKeyboardDidShowNotification object:nil]; 
    [center addObserver:self selector:@selector(keyboardHidden) name:UIKeyboardWillHideNotification object:nil]; 

这可以通过添加来完成。 然后在您的实现文件中定义方法keyboardShown和keyboardHidden。 当键盘出现并消失时,这些方法将自动调用。 在这些方法中相应地调整背景视图的大小。由于您使用的是滚动视图,请介意scrollView的contectView大小。因为它与视图的框架大小不同。

+0

顺便说一句,键盘的大小是320×216点在iPhone。只需调整你的视图,从它的高度减去216,你就可以实现你想要的! –

+0

其在日期选取器视图中已经存在,只是在该问题中看到的链接 – iosdev

+0

我刚刚编辑了问题帖子的链接。我相信你首先需要很好地理解代码,并且要让别人给你提供的代码。它会帮助你解决这些问题。根据我的理解,当你的日期选择器被选中后,键盘出现时你的视图被推高。还要确保当你选择一个文本框你有一个IBAction附加到你的文本框,将你的背景框架重置为全屏。在textfields touchDown上执行此操作。然后尝试按照键盘视图调整视图大小。 –

0

对于滚动视图和需要移动其内容时出现键盘的基本问题,我发现这open source scroll view class by Michael Tyson to be very useful

基本上,您只需将TPKeyboardAvoidingScrollView类添加到您的项目中,并在通常使用UIScrollView的地方使用它。如果您愿意,您添加到TPKeyboardAvoidingScrollView的子视图可以是UITextField对象。当您点击这些字段开始编辑,并出现键盘时,容器将选择一个合适的滚动位置,以便正在编辑的字段不被键盘隐藏,并且您将看不到像您在屏幕截图。

+0

只有在dob文本字段之后的文本字段出现问题时,剩余所有工作正常 – iosdev

0

我想我得到这个问题。

jst例如,在我们的注册页面中,DOB有很多文本框和按钮。

所以,基本上当任何文本编辑和之后,而不是返回键盘,用户按DOB的按钮。

所以你必须首先resignFirstRespoder你所有的文本框。

问题是你什么时候开始编辑帧设置为顶部和endEditing设置为底部,但是当你点击按钮结束编辑没有调用所以帧没有设置到底部。再次,你开始编辑框架设置顶部,所以问题白羊座。

我希望这个帮助...