iOS 实时监听UITextField输入事件

13 篇文章 0 订阅



   searchTextField=[[UITextFieldalloc]initWithFrame:CGRectMake(30,0,searchView.frame.size.width-120,30)];

    [searchTextFieldsetPlaceholder:MYLocalizedString(@"shangpinmingchengtiaoma",@"")];

    searchTextField.font = SearchViewTextFont;

    [searchTextFieldsetBackgroundColor:[UIColorwhiteColor]];

//    searchTextField.layer.borderWidth = 1;

//    searchTextField.layer.borderColor = COLOR(173, 173, 173, 1).CGColor;

    searchTextField.delegate=self;

    [searchView addSubview:searchTextField];

    

    searchTextField.returnKeyType = UIReturnKeySearch;

    [searchTextFieldsetAutocapitalizationType:UITextAutocapitalizationTypeNone];//关闭首字母大写

    [searchTextFieldsetAutocorrectionType:UITextAutocorrectionTypeNo];//关闭键盘联想

    

//设置 UITextField 输入监听事件

    [searchTextFieldaddTarget:selfaction:@selector(textFieldDidChange:)forControlEvents:UIControlEventEditingChanged];


    searchTextField.text =self.searchStr;

    [searchTextFieldbecomeFirstResponder]



//

//

//

//

UITextField *searchTextField;//搜索

NSTimeInterval textFieldDidChangeInterval;

NSString *tempString;


-(void)textFieldDidChange:(id)sender{

    

    UITextField *senderText=(UITextField *)sender;

    

//    NSString *textSearchStr = [senderText.text stringByReplacingOccurrencesOfString:@"" withString:@""];

    //注:iOS区分中英文空格 stringByReplacingOccurrencesOfString替代为如下方法

//    NSString *textSearchStr = [[senderText.text componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] componentsJoinedByString:@""];


    //去除首尾空格

    NSString *textSearchStr = [senderText.textstringByTrimmingCharactersInSet:[NSCharacterSetwhitespaceCharacterSet]];

    

    //中文输入时候会连续掉用两次  (在数据量大的时候)从而出现崩溃问题 故:检测字符相同时候就return

    if ([self.searchStrisEqualToString:textSearchStr])return;

    

    //限制字符输入长度

    if (textSearchStr.length >textSearchCount) {

        

        searchTextField.text = [textSearchStrsubstringToIndex:textSearchCount];

        [searchTextFieldendEditing:YES];

        return;

    }

    

    NSTimeInterval start =CACurrentMediaTime();

    

    //获取用户输入间隔时间 如果间隔时间太短 < 0.8则只刷新用户最后一次输入的字符

    if (start -textFieldDidChangeInterval <0.5) {

        

        textFieldDidChangeInterval = start;

        

        //如果0.5秒之后   用户没有输入 则刷新列表

        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 *NSEC_PER_SEC)),dispatch_get_main_queue(), ^{

            if ([tempStringisEqualToString:textSearchStr]) {

                NSLog(@"刷新列表");

            }else{

                NSLog(@"不刷新");

            }

        });

        

        if (![tempStringisEqualToString:textSearchStr]) {

            tempString = textSearchStr;

        }

        

    }else{

        textFieldDidChangeInterval = start;

        

        NSLog(@"刷新列表");

    }

}







  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iOS 中,UITextField 的光标大小和颜色是由系统控制的,我们不能直接修改其大小,但是可以通过修改 UITextField 的 tint 属性来改变光标的颜色。 虽然不能直接修改光标大小,但我们可以通过设置 UITextField 的边框样式为 None,然后通过添加一个自定义的 UIView 作为光标来模拟实现。 以下是一个示例代码,可以在 UITextField 中添加一个自定义的光标: ```swift let customCursorView = UIView(frame: CGRect(x: 0, y: 0, width: 2, height: textField.frame.height)) customCursorView.backgroundColor = UIColor.red textField.tintColor = UIColor.clear textField.addSubview(customCursorView) ``` 在这个代码中,我们创建了一个自定义的 UIView,用于模拟光标。我们将其宽度设置为 2,高度设置为 UITextField 的高度,颜色设置为红色,并将其添加到 UITextField 上。最后,我们将 UITextField 的 tint 设置为 clear,以隐藏系统的光标。 需要注意的是,为了保证自定义光标的位置和系统光标的位置一致,我们还需要在 UITextField 的代理方法中添加以下代码: ```swift func textFieldDidChangeSelection(_ textField: UITextField) { if let selectedRange = textField.selectedTextRange { let cursorPosition = textField.offset(from: textField.beginningOfDocument, to: selectedRange.start) if let customCursorView = textField.subviews.last { customCursorView.frame.origin.x = textField.frame.origin.x + textField.textRect(forBounds: textField.bounds).origin.x + textField.font!.size(of: String(textField.text![..<textField.text!.index(textField.text!.startIndex, offsetBy: cursorPosition)]), constrainedToWidth: textField.frame.width).width } } } ``` 在这个代理方法中,我们获取了 UITextField 中被选中的文本范围,然后计算了光标在 UITextField 中的位置,并将自定义光标的位置进行了调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值