UITextFieldDelegate和tap事件

大家都很熟悉下面这3个代理函数:

#pragma mark - UITextFieldDelegate


-(void)textFieldDidBeginEditing:(UITextField *)textField

{

    NSLog(@"textFieldDidBeginEditing");

    CGRect frame = textField.frame;

    NSLog(@"self h:%f",self.view.frame.size.height);

    NSLog(@"frame y:%f", frame.origin.y);

    NSLog(@"key board h:%f",KEYBOARD_H);

    float offset = frame.origin.y + frame.size.height - (self.view.frame.size.height - KEYBOARD_H) + 15;//键盘高度253

    NSLog(@"offset:%f", offset);

    NSTimeInterval animationDuration = 0.3f;

    [UIViewbeginAnimations:@"ResizeForKeyboard"context:nil];

    [UIView setAnimationDuration:animationDuration];

    

    //将视图的Y坐标向上移动offset个单位,以使下面腾出地方用于软键盘的显示

    if(offset > 0)

        self.view.frame =CGRectMake(0.0f, -offset,self.view.frame.size.width,self.view.frame.size.height);

    

    [UIViewcommitAnimations];

}


//当用户按下return键或者按回车键,keyboard消失

-(BOOL)textFieldShouldReturn:(UITextField *)textField

{

    [textField resignFirstResponder];

    return YES;

}


//输入框编辑完成以后,将视图恢复到原始状态

-(void)textFieldDidEndEditing:(UITextField *)textField

{

    self.view.frame =CGRectMake(0,0, self.view.frame.size.width,self.view.frame.size.height);

}

他们实现的效果就是点击textField后弹出keyboard,输入content后按返回键合回车键,keyboard消失,而实际过程中 textField 有可能被keyboard挡住,所以就有上面对Frame的操作,keyboard弹出,整个UI的frame向上移动offset,keyboard消失,frame复原。

下面是UI界面的tap事件处理,效果描述:当键盘存在时,点击键盘以外的其他地方,键盘消失,代码如下

- (void)setUpForDismissKeyboard {

    NSNotificationCenter *nc = [NSNotificationCenterdefaultCenter];

    UITapGestureRecognizer *singleTapGR =

    [[UITapGestureRecognizeralloc] initWithTarget:self

                                            action:@selector(tapAnywhereToDismissKeyboard:)];

    NSOperationQueue *mainQuene =[NSOperationQueuemainQueue];

    [nc addObserverForName:UIKeyboardWillShowNotification

                    object:nil

                     queue:mainQuene

                usingBlock:^(NSNotification *note){

                    [self.viewaddGestureRecognizer:singleTapGR];

                }];

    [nc addObserverForName:UIKeyboardWillHideNotification

                    object:nil

                     queue:mainQuene

                usingBlock:^(NSNotification *note){

                    [self.viewremoveGestureRecognizer:singleTapGR];

                }];

}


- (void)tapAnywhereToDismissKeyboard:(UIGestureRecognizer *)gestureRecognizer {

    //method会将self.view里所有的subviewfirst responderresign

    [self.viewendEditing:YES];

}


UITextFieldDelegate和tap事件是UI操作中比较常见的,我们没有比较遇见一个界面就给它添加,这样的代码太臃肿,要时刻重构自己写过的代码,所以我们把这些常用的功能封装在baseViewController里面(代理的方式也可以,用到就实现相应方法),让每一个viewController都继承它。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值