在实现搜索功能的时候,搜索框的值发生变化,我们不可能每次都去调用接口,应该等用户结束输入的时候再去调用接口搜索,记录搜索框的值发生变化的间隔,可以比较有效的监听用户的输入状态。
/// 上一个输入的时间,避免每次输入都调用搜索接口
@property (nonatomic, assign) __block NSTimeInterval preInputTime;
#pragma mark - 搜索相关
- (void)textFieldValueDidChange:(UITextField *)textField {
NSLog(@"---------------来搜索");
NSString *str = [textField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
textField.text = str;
// 0.3秒后,判断一次
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
// 取得当前时间戳 毫秒级
NSTimeInterval currentTime = [JXUtils getNumberMilliSecondTimestampForNow];
// 如果当前时间戳和上次的时间戳相差 0.3 秒,就进行搜索
if (currentTime - self.preInputTime >= 300) {
NSLog(@"------------------------------------去搜索");
// 调用搜索接口进行搜索
[self fetchGoodsByKeyword:str];
}
});
// 记录上次的时间戳,毫秒级
self.preInputTime = [JXUtils getNumberMilliSecondTimestampForNow];
}
- (UITextField *)searchTF {
if (!_searchTF) {
_searchTF = [UITextField textFieldWithTitle:@"" textColor:kFont_Medium_Color font:SYSFONT(14)];
_searchTF.placeholder = @"请输入商品名称";
_searchTF.clearButtonMode = UITextFieldViewModeWhileEditing;
[_searchTF addTarget:self action:@selector(textFieldValueDidChange:) forControlEvents:UIControlEventEditingChanged];
}
return _searchTF;
}