比如文本输入速度很快,不想每次快速的输入都执行某些操作,但如果输入停顿0.5秒的话就要执行该操作的话,可以使用以下方法
// 每次输入的事件监听
- (void)startSearch:(UITextField *)textField {
NSLog(@"%s", __PRETTY_FUNCTION__);
[NSObject cancelPreviousPerformRequestsWithTarget:self];
[self performSelector:@selector(loadSearchSuggestionsWithSearchWord:) withObject:textField.text afterDelay:0.5];
}
// 需要执行的实际操作
- (void)loadSearchSuggestionsWithSearchWord:(NSString *)searchWord {
NSLog(@"%s", __PRETTY_FUNCTION__);
// 发起网络请求,成功后刷新tableView显示数据
}
方法解释:
/**
* 延迟执行
*
* @param aSelector 方法名称
* @param anArgument 要传递的参数,如果无参数,就设为nil
* @param delay 延迟的时间
*/
- (void)performSelector:(SEL)aSelector withObject:(nullable id)anArgument afterDelay:(NSTimeInterval)delay{
};
// 可以这样调用
[self performSelector:@selector(methodName) withObject:self afterDelay:0.5];
/**
* 取消延迟执行
*
* @param aTarget 一般填self
* @param aSelector 延迟执行的方法
* @param anArgument 设置延迟执行时填写的参数(必须和上面performSelector方法中的参数一样)
*/
+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget selector:(SEL)aSelector object:(nullable id)anArgument;
// 取消目标发起的所有延迟
+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget;
// 以上两个取消方法的使用:
[NSObject cancelPreviousPerformRequestsWithTarget:self];
网友评论