2013-03-14 412 views

回答

10

是的,我们可以检查!与UITextField委托,- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

- (void) callMeAfterTwoSeconds { 
    NSLog(@"I'll call after two seconds of inactivity!"); 
} 

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    [NSRunLoop cancelPreviousPerformRequestsWithTarget:self]; 
    [self performSelector:@selector(callMeAfterTwoSeconds) withObject:nil afterDelay:2.0]; 

    return YES; 
} 

当你输入(敲击键盘从按键),将取消对callMeAfterTwoSeconds功能以前调用,一旦你停下来,它将它所后2秒延时打电话,是的,它会在2秒后打电话。

更新: 甚至可以传递文本框的对象performSelector知道哪些文本框是无效的,对于您的callMeAfterTwoSeconds功能就会像,

- (void) callMeAfterTwoSeconds:(UITextField *)textfield { 
    if(textfield == txtUserName) { 
     NSLog(@"User textfield has NO activity from last two seconds!"); } 
} 
6

转到UITextField的连接检查器,并将“编辑已更改”从“已发送事件”列表连接到您所选的预定义IBAction。或者,如果你不使用Storyboard,你可以通过编程来完成。

[youTextField addTarget:self action:@selector(textFieldInputDidChange:) forControlEvents:UIControlEventEditingChanged]; 

现在你只需连接IBAction将每用户改变了UITextField一个字符时间发射。创建一个timer作为伊娃。现在每次调用IBAction时,启动计时器,如果它将在未重新启动的情况下达到2秒,您知道用户未在UITextField中输入/删除值。

+0

这正是我所追求的和一个很棒的解决方案。谢谢! – Tander 2014-03-29 22:01:02

-1

我不认为调用[NSRunLoop cancelPreviousPerformRequestsWithTarget:self]是一个很好的做法。

相反,我会做:

[self.searchTextField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged]; 
//or select the textfield in the storyboard, go to connections inspector and choose the target for 'Editing Changed' 


- (IBAction)textFieldDidChange:(id)sender { 
    [self performSelector:@selector(editingChanged:) withObject:self.searchTextField.text afterDelay:2.0]; 
} 

- (void)editingChanged:(NSString *)text { 
    if ([text isEqualToString:self.searchTextField.text]) { 
     //do your thing 
    } 
} 

这种方式,用户可以输入,它会触发一个呼叫editingChanged:,那么你可以仔细检查,如果该值同时改变,如果它没有那么用户停止输入2秒钟。

2

我这样做了searchBar,但我认为它也适用于UITextField。代码在Swift中。 :)

func searchBar(searchBar: UISearchBar, textDidChange searchText: String) { 
    searchTimer?.invalidate() 
    searchTimer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("search"), userInfo: nil, repeats: false) 
} 

func search() { 
    println("search \(searchBar.text)") 
} 
相关问题