0

我在我的应用程序中使用滚动视图,因为当我点击 dob 文本字段时,日期选择器视图显示为弹出窗口,当我进一步点击连续文本字段时,视图就像图像中一样,这是我的代码,

用于日期选择器可见性。

按下 UIButton 后会弹出 UIDatePicker

用于键盘方向

- (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];
}

谁能帮我清除。 在此处输入图像描述

4

3 回答 3

0

对于滚动视图和键盘出现时需要移动其内容的基本问题,我发现Michael Tyson 的这个开源滚动视图类非常有用

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

于 2012-09-21T06:17:30.453 回答
0

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

这可以通过添加:

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

在 viewDidLoad 中。然后在您的实现文件中定义方法keyboardShown 和keyboardHidden。这些方法会在键盘出现和消失时自动调用。在这些方法中,相应地调整背景视图的大小。由于您使用的是滚动视图,请注意滚动视图的 contectView 大小。因为它与视图的框架大小不同。

于 2012-09-21T05:05:56.353 回答
0

我想我得到了问题。

例如,在您的注册页面中,许多文本字段和 DOB 按钮。

所以,基本上当任何文本字段编辑时,而不是返回键盘,用户按下 DOB 按钮。

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

问题是当您将 startEditing 框架设置为顶部并将 endEditing 设置为底部但当您单击按钮时 endEditing 未调用因此框架未设置为底部。然后你再次开始编辑框架再次设置为顶部,所以问题出现了。

我希望这有帮助...

于 2013-11-12T11:27:00.027 回答