当前位置:  开发笔记 > 编程语言 > 正文

如何以编程方式将UIScrollView移动到焦点在键盘上方的控件中?

如何解决《如何以编程方式将UIScrollView移动到焦点在键盘上方的控件中?》经验,为你挑选了3个好方法。

我有6个UITextFields在我的UIScrollView.现在,我可以按用户请求滚动.但是当键盘出现时,会隐藏一些文本字段.

这不是用户友好的.

如何以编程方式滚动视图,以确保键盘不隐藏文本字段?



1> james_womack..:

这对我有用.在为键盘调整视图之前,有一个实例变量保存UIScrollView的偏移值,这样您就可以在UITextField返回之后恢复之前的状态:

//header
@interface TheViewController : UIViewController  {
    CGPoint svos;
}


//implementation
- (void)textFieldDidBeginEditing:(UITextField *)textField {
    svos = scrollView.contentOffset;
    CGPoint pt;
    CGRect rc = [textField bounds];
    rc = [textField convertRect:rc toView:scrollView];
    pt = rc.origin;
    pt.x = 0;
    pt.y -= 60;
    [scrollView setContentOffset:pt animated:YES];           
}

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    [scrollView setContentOffset:svos animated:YES]; 
    [textField resignFirstResponder];
    return YES;
}


只是一个小小的补充:放svos = scrollView.contentOffset; 在ViewDidLoad方法中,如果您有多个UITextFields.因为如果你从一个文本字段转到另一个文本字段而不隐藏键盘svos将被覆盖,因此恢复内容偏移将失败.

2> mamcx..:

最后,一个简单的修复:

UIScrollView* v = (UIScrollView*) self.view ;
CGRect rc = [textField bounds];
rc = [textField convertRect:rc toView:v];
rc.origin.x = 0 ;
rc.origin.y -= 60 ;

rc.size.height = 400;
[self.scroll scrollRectToVisible:rc animated:YES];

现在我认为只是将它与上面的链接结合起来并设置好了!



3> Michael Tyso..:

我已经整理了一个通用的,插入式UIScrollView和UITableView子类,它负责将其中的所有文本字段移出键盘.

当键盘即将出现时,子类将找到即将被编辑的子视图,并调整其帧和内容偏移以确保视图可见,并使用与键盘弹出窗口匹配的动画.当键盘消失时,它会恢复其先前的大小.

它应该基本上适用于任何设置,可以是基于UITableView的界面,也可以是手动放置的视图.

在这里.


(For google: TPKeyboardAvoiding, TPKeyboardAvoidingScrollView, TPKeyboardAvoidingCollectionView.)
Editor's note: TPKeyboardAvoiding seems to be continually updated and fresh, as of 2014.

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有