UITextField实现模糊查询

严安志
2023-12-01

有时候,我们可能会需要用到UITextField来自己构造一些类似于搜索框的控件来进行搜索;

假如我们用UITextField构造了一个搜索框,那么要实现简单的模糊查询,该如何去做呢?

一般我们会想到这个方法:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;


但是这个方法有一个弊端,就是在点击键盘上的按钮时都会调用,但是在点击汉字选择栏的按钮时是不会调用的,于是我们只能用另一种方法来实现了就是这个:
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(textFiledEditChanged:)
                                                name:@"UITextFieldTextDidChangeNotification"
                                              object:AText];

添加了一个名字为UITextFieldTextDidChangeNotification的通知的监听,监听AText的变化情况,AText就是你构造的搜索框的那个UITextField

//通知的调用方法,点击键盘上按钮和汉字选择栏的按钮都会调用这个方法(但是有个缺陷,就是点击汉字和确定按钮会走两遍这个方法)
-(void)textFiledEditChanged:(NSNotification *)obj
{
    UITextField *textField = (UITextField *)obj.object;
    NSString *str=textField.text;
    
    //这样就很好的解决了走两遍的问题,不至于走两遍额模糊查询代码
    if ([self.strJs isEqualToString:str])
    {
        //在这里写模糊查询的实现代码,详情可以查看上一篇“UISearchBar和UITableView实现简单的模糊查询”(这里同样可以配合 UITableView使用)
    }
    else
    {
        self.strJs=textField.text;
        NSLog(@"走的是通知方法,内容%@",str);
    }
}




 类似资料: