当键盘显示时将UIView向上移动

3
我知道这是一个常见的问题,但我从找到的例子中没有成功地实现它。我可能做错了一些简单的事情..(希望如此)。我正在尝试将UIview向上移动,因为我在底部隐藏了一个文本字段。
关于我的应用程序,它具有选项卡控制器并实现标准UIView。当我添加移动显示代码时,什么也没有发生。我需要一个滚动视图才能使其工作吗?这是与选项卡控制器冲突还是我做错了其他事情?谢谢

3
请尝试发布一些代码,展示你如何将UIView向上移动-这样可以看出你哪里出了问题。 - Luke
这是一个关于如何在键盘出现时使UITextField上移的教程链接,但我已经尝试了几个教程。应该只需要修改文本字段即可实现。 - Dan
我一直收到警告,'MainViewController' 可能无法响应 '-setViewMovedUp:'。 - Dan
你需要发布处理视图“向上移动”的代码,因为你的问题可能有很多不同的原因。 - James Bedford
2个回答

6
我写了一个关于UIView的小类别,可以管理暂时滚动周围的东西,而不需要将整个东西包装到UIScrollView中。在这里使用“滚动”这个动词可能不是最理想的,因为它可能会让你认为涉及到了一个滚动视图,但实际上并没有 - 我们只是在动画化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];
}

...或其他。该类别提供了三种相当不错的方法来调整视图的位置。


我似乎遇到了UIView可能无法响应滚动至视图的问题。你有什么想法吗? - Dan
1
#import "UIView+FormScroll.h" - Dan Ray

1

最简单的方法是将表单放置在UITableViewCell中,并将该单元格放置在UITableView上。如果这样做,UITableView将自动处理大部分工作,并且与苹果应用程序完全相同。我在其他文章或答案中看到过这个方法,但我记不清在哪里看到的。

然而,当我尝试模仿UITableView的行为时,我发现它非常困难。大多数功能都很容易实现,但我无法复制某些特殊情况下的特殊行为。因此,我选择使用UITableView


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接