zoukankan      html  css  js  c++  java
  • IOS 开发之-- textfield和textview,return键的改变,点击return键

    一,textfield的return键改变

    方案1.改变键盘右下角的换行(enter)键为完成键,后实现代理方法键盘自动回弹

    UITextField *textField = [[UITextField alloc]initWithFrame:CGRectMake(100, 300, 200, 40)];
    [self.view addSubview:textField];
    
    textField.delegate = self;
    textField.returnKeyType = UIReturnKeyDone;//改变为完成键,如果在项目中导入了YYText框架那么原生的就被替换掉了,变为returnKeyType = UIKeyboardTypeTwitter;
    
    //实现UITextField代理方法
    - (BOOL)textFieldShouldReturn:(UITextField *)textField {
    
        [textField resignFirstResponder];//取消第一响应者
    
        return YES;
    }
    /*textField.returnKeyType可以改变为很多样式
    typedef NS_ENUM(NSInteger, UIReturnKeyType) {
        UIReturnKeyDefault,
        UIReturnKeyGo,
        UIReturnKeyGoogle,
        UIReturnKeyJoin,
        UIReturnKeyNext,
        UIReturnKeyRoute,
        UIReturnKeySearch,
        UIReturnKeySend,
        UIReturnKeyYahoo,
        UIReturnKeyDone,
        UIReturnKeyEmergencyCall,
        UIReturnKeyContinue NS_ENUM_AVAILABLE_IOS(9_0),
    };
    */

    当然搜狗输入法是自带隐藏键盘的功能的,但是你不能保证每个用户都装有搜狗输入法,这种方案也会改变搜狗键盘的右下角按钮为完成键

    方案2.点击textField以外区域键盘回弹

    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
        [self.view endEditing:YES];
    }

    如果textField在tableView上还可以实现下面的tableView的代理方法

    -(void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
        [self.view endEditing:YES];
    }

    问题二:键盘键盘遮挡输入框的的问题

    解决方案

    #pragma mark - textFieldDelegate(别忘了遵守协议设置代理)
    - (void)textFieldDidBeginEditing:(UITextField *)textField {
       self.view.y = self.view.y - 216;  //216是输入框在最底部时view移动的距离,具体移动多少距离,需要根据实际情况而定
    }
    
    - (void)textFieldDidEndEditing:(UITextField *)textField {
      self.view.y = self.view.y + 216;
    }

    其实这里也可以自己写个动画!只要实现这两个方法就可以了,一般的话,会在键盘弹出的时候,监听事件,然后进行操作的!

    同样textview也可以实现点击return键让键盘隐藏的操作,代码如下:

    UITextFieldDelegate代理里面响应return键的回调:textFieldShouldReturn:。
    但是 UITextView的代理UITextViewDelegate 里面并没有这样的回调。
    但是有别的方法可以实现:
    UITextViewDelegate里面有这样一个代理函数:
    - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
    
    这个函数的最后一个参数text代表你每次输入的的那个字,所以:
    - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{
        if ([text isEqualToString:@"
    "]){ //判断输入的字是否是回车,即按下return
            //在这里做你响应return键的代码
    [self.textView resignFirstResponder];
    return NO; //这里返回NO,就代表return键值失效,即页面上按下return,不会出现换行,如果为yes,则输入页面会换行 } return YES; }
  • 相关阅读:
    全网解析视频接口自行测试
    emlog博客的安装教程
    无需任何软件,简单步骤教你手机投屏到电脑
    关于Windows 10系统重置了但以前的office找不到了问题的解决方法
    java&nbsp;indexOf方法
    JAVA&nbsp;线程&nbsp;yield
    android&nbsp;sqlite&nbsp;增删改[insert、up…
    socket error 错误类型列表
    armeabigcc:error trying to& ex…
    android&nbsp;setBackgroundColor
  • 原文地址:https://www.cnblogs.com/hero11223/p/6734934.html
Copyright © 2011-2022 走看看