当键盘显示时向上移动UIView

问题描述:

我知道这是一个经常遇到的问题,但是我没有从我找到的例子中实现这个功能。我可以做一些简单的错误..(让希望如此)。我正在尝试将UIview作为隐藏在底部的文本字段提升。当键盘显示时向上移动UIView

有一点关于我的应用程序,它有一个标签栏控制器,并实现一个标准的UIView。当我添加代码来移动显示时没有任何反应。我是否需要有一个滚动视图才能正常工作,是否与Tab控制器发生冲突,或者我是否做了其他错误?感谢

+3

尝试发布你如何移动UIView的一些代码 - 可以看到你去哪里错了 – Luke 2011-03-07 14:25:31

+0

http://*.com/questions/1126726/how-to-make-a-uitextfield-move-当键盘提示是一个教程,但我现在已经跟几个。应该是修改文本字段的情况。 – Dan 2011-03-07 14:41:30

+0

我总是收到'MainViewController'的警告可能不会响应'-setViewMovedUp:' – Dan 2011-03-07 14:42:17

我写了一篇关于UIView的一个小类别管理暂时围绕滚动的东西,而无需包住整个事情到一个UIScrollView。我在这里使用动词“scroll”可能并不理想,因为它可能会让你觉得有一个滚动视图,并没有 - 我们只是动画UIView(或UIView子类)的位置。

有一些嵌入在这个适合我的形式和布局,可能不适合你的神奇数字,所以我鼓励调整,以适应您的具体需求。

的UIView + FormScroll.h:

#import <Foundation/Foundation.h> 

@interface UIView (FormScroll) 

-(void)scrollToY:(float)y; 
-(void)scrollToView:(UIView *)view; 
-(void)scrollElement:(UIView *)view toPoint:(float)y; 

@end 

的UIView + FormScroll.m:

#import "UIView+FormScroll.h" 


@implementation UIView (FormScroll) 


-(void)scrollToY:(float)y 
{ 

    [UIView beginAnimations:@"registerScroll" context:NULL]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
    [UIView setAnimationDuration:0.4]; 
    self.transform = CGAffineTransformMakeTranslation(0, y); 
    [UIView commitAnimations]; 

} 

-(void)scrollToView:(UIView *)view 
{ 
    CGRect theFrame = view.frame; 
    float y = theFrame.origin.y - 15; 
    y -= (y/1.7); 
    [self scrollToY:-y]; 
} 


-(void)scrollElement:(UIView *)view toPoint:(float)y 
{ 
    CGRect theFrame = view.frame; 
    float orig_y = theFrame.origin.y; 
    float diff = y - orig_y; 
    if (diff < 0) { 
     [self scrollToY:diff]; 
    } 
    else { 
     [self scrollToY:0]; 
    } 

} 

@end 

导入到你的UIViewController,然后你可以做

- (void)textFieldDidBeginEditing:(UITextField *)textField 
{ 
    [self.view scrollToView:textField]; 
} 

-(void) textFieldDidEndEditing:(UITextField *)textField 
{ 
    [self.view scrollToY:0]; 
    [textField resignFirstResponder]; 
} 

.. 。管他呢。该类别为您提供了三种很好的方式来调整视图的位置。

+0

我似乎得到UIView可能无法响应滚动查看。任何想法 – Dan 2011-03-07 21:10:25

+1

#import“UIView + FormScroll.h” – 2011-03-08 14:17:57

最简单的方法是将您的表单放置在UITableViewCell中,并将单元格放置在UITableView上。如果那么,UITableView将自动处理大部分作品,并且与Apple应用程序完全相同。我在其他文章或答案中看到了这一点,但我不记得我在哪看到这个。

但是我试着实现模拟UITableView的行为,这非常困难。大部分功能都很简单,但在罕见情况下,我无法复制特殊行为。所以我只是选择使用UITableView