3

I have the following UISearchbar code:

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
    NSTimer *myTimer;

    NSLog(@"Timer=%@",myTimer);
    if (myTimer)
    {
        if ([myTimer isValid])
        {
            [myTimer invalidate];
        }
        myTimer=nil;
    }
    myTimer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(OnTextChange) userInfo:nil repeats:NO];

}

after writing above code my log shows Timer=null,

OnTextChange is method which fetches data from Url.

Thanks in advance !!

4

3 回答 3

6

请将此行写在.h文件中

NSTimer *myTimer;

然后在.m文件中执行

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{

    NSLog(@"Timer=%@",myTimer);
    if (myTimer)
    {
        if ([myTimer isValid])
        {
            [myTimer invalidate];
        }
        myTimer=nil;
    }
    myTimer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(OnTextChange) userInfo:nil repeats:NO];

}
于 2013-05-01T06:23:09.690 回答
0

您可以使用 NSTimer 来延迟搜索的调用,并在文本更改时取消计时器: 给您的对象一个 NSTimer 属性或字段;在 searchBar:textDidChange: 中取消任何现有计时器,然后创建并安排一个新计时器。计时器的目标应该调用您的搜索方法。

参考这个重复的问题:UISearchBar 检测用户何时停止输入并且不立即搜索所以检测暂停

于 2013-05-01T06:26:50.867 回答
0

每次为 NSTimer 创建新对象时,这就是它给出 null 的原因。

NSTimer *myTimer全局声明 。

于 2013-05-01T06:21:02.243 回答