文档章节

获取当前点击处于编辑状态的UITextField的坐标

萍水相逢OSC
 萍水相逢OSC
发布于 2016/12/14 14:19
字数 273
阅读 39
收藏 0

如若在一个列表中,每个cell中都有一个编辑框,当处于编辑状态时,会弹出软键盘,需要通过计算软键盘的高度来移动整个列表的位置。

下面这个方法是,获取当前编辑框的坐标

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
    CGPoint eventPoint = [textField convertPoint:textField.frame.origin toView:appDelegate.window];
    
    _viewMoveHeight = eventPoint.y;
    
    return YES;
}

监听软键盘事件

    //软键盘
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardAction:)
                                                 name:UIKeyboardWillShowNotification
                                               object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardAction:)
                                                 name:UIKeyboardWillHideNotification
                                               object:nil];

事件实现

- (void)keyboardAction:(NSNotification *)notification
{
    NSDictionary *userInfo = [notification userInfo];
    NSValue *animationDuration = [userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey];
    NSTimeInterval timeInt;
    [animationDuration getValue:&timeInt];
    
    NSValue *aValue = [userInfo objectForKey:UIKeyboardFrameEndUserInfoKey];
    CGRect keyboardRect = [aValue CGRectValue];
    
    CGFloat keyBoradHeight = keyboardRect.size.height;
    if (keyBoradHeight <= 0) {
        return;
    }
    
    
    CGFloat offestY = kScreen_H - keyBoradHeight;
    CGFloat paading = 10;
    __block CGFloat moveY;
    if (_curTouchPointHeight > offestY) {
        moveY = _curTouchPointHeight - offestY + paading;
    }else{
        moveY = 0;
    }
    
    if (notification.name == UIKeyboardWillShowNotification) {
        if (isShowKeyboard == NO) {
            [UIView animateWithDuration:timeInt
                                  delay:0.f
                                options:UIViewAnimationOptionCurveEaseOut
                             animations:^{
                                 CGRect oldFrame = self.tableView.frame;
                                 oldFrame.origin.y -= moveY;
                                 self.tableView.frame = oldFrame;
                             } completion:^(BOOL finished) {
                                 isShowKeyboard = YES;
                             }];
            
            _tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(keyBoardHiden:)];
            [self.view addGestureRecognizer:_tap];
        }
        
        
    } else if (notification.name == UIKeyboardWillHideNotification) {
        [UIView animateWithDuration:-timeInt
                              delay:0.f
                            options:UIViewAnimationOptionCurveEaseOut
                         animations:^{
                             CGRect oldFrame = self.tableView.frame;
                             oldFrame.origin.y = 0;
                             self.tableView.frame = oldFrame;
                         } completion:^(BOOL finished) {
                             isShowKeyboard = NO;
                         }];
    }
}

- (void)dealloc
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

 

© 著作权归作者所有

共有 人打赏支持
萍水相逢OSC
粉丝 104
博文 16
码字总数 4469
作品 0
深圳
程序员
私信 提问
IOS开发之UITextField

#import "AppDelegate.h" @interface AppDelegate () @end @implementation AppDelegate - (BOOL)application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary )l......

鹿微微鹿
2016/04/12
12
0
UIView之endEditing方法

问题 在 《IOS 键盘的显示和关闭》一篇介绍了键盘的显示与关闭的原理流程性的东西,在关闭如果当前我们正在在textField上输入文本的话,我们只要做如下操作 [textField resignFirstResponde...

big军
2013/01/05
0
1
iOS UITextField 使用与方法解读

UITextField是IOS开发中用户交互中重要的一个控件,常被用来做账号密码框,输入信息框等。 初始化一个文字框: 设置和获取文字框文字: @property(nonatomic,copy) NSString *text; 通过Att...

珲少
2015/04/14
0
0
iOS开发之UITextField

UITextField展示的是一些可编辑的内容,并且与用户有一些交互。比如当你在虚拟键盘上按下return键时,一般会关联到键盘隐藏事件上。UITextField的一些状态大多在UITextFieldDelegate协议中有...

code_free
2014/07/21
0
0
IOS开发之UITextField的协议方法

#import "AppDelegate.h" @interface AppDelegate () <UITextFieldDelegate> @end @implementation AppDelegate - (BOOL)application:(UIApplication )application didFinishLaunchingWithOp......

鹿微微鹿
2016/04/12
13
0

没有更多内容

加载失败,请刷新页面

加载更多

nginx 找不到pid文件原因及解决办法

2.var/run/nginx.pid文件 首先 var/run这个目录是干嘛用的? 此文件夹包含描述系统启动以来系统信息的数据。此文件夹下的文件必须在启动过程初期清除(删除或归零)。程序可以在/var/run下有...

李佳顺
37分钟前
2
0
【scala】2.控制结构和函数

简介 在Java或者C++中,我们把表达式和语句看做两种不同的东西。表达式有值,而语句执行动作。 在Scala中,几乎所有构造出来的语法结构都是有值的。这个特性使得程序更加的精简,也更易读。 ...

Areya
41分钟前
0
0
Java中的并发工具类(CountDownLatch、CyclicBarrie、Exchanger)

在JDK的并发包里提供了很多有意思的并发工具类。CountDownLatch、CyclicBarrier和Semaphore 工具类提供了一种并发流程控制的手段,Exchanger 工具类则提供了在线程间交换数据的一种手段。 1....

孟飞阳
45分钟前
0
0
Docker之推送镜像到Harbor

安装Harbor之类的在这里就不讲了,请看我的这篇博客 1、在Harbor上创建用户 如下图1.1所示,"Users"->"NEW USER",之后会弹出一个输入框,输入用户名、密码之类的,这个后面会用到 图1.1 2...

克虏伯
今天
0
0
JVM-----java内存区域与java内存模型

一.java内存区域 jvm在执行java程序的过程中会把所管理的内存分为若干不同的区域,有的区域随着虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束而建立和销毁的。 以下是java运...

Carol998
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部