找出UITextfield的结束编辑,而无需辞职第一响应者

pra*_*bhu 5 uitextfield user-inactivity ios

当用户输入时UITextfield,他停止了2秒钟,光标仍然亮着UITextfield,那么我们如何识别这个事件呢?即我想检查编辑是否结束,而不是从第一响应者那里辞职UITextField.这样做的方法是什么?

Hem*_*ang 11

是的,我们可以检查一下!与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;
}
Run Code Online (Sandbox Code Playgroud)

当您正在键入(从键盘上敲击键)时,它将取消之前的callMeAfterTwoSeconds功能调用,一旦停止,它会在延迟2秒后将其设置为呼叫,是的,它将在2秒后调用.

更新: 即使您可以将该文本字段作为对象传递,performSelector以了解哪个文本字段处于非活动状态,因为您的callMeAfterTwoSeconds功能将是,

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


iDr*_*oid 6

转到您的连接检查器,UITextField并将"已发送事件"列表中的"编辑已更改"连接到IBAction您选择的预定义.或者,如果您不使用Storyboard,则可以以编程方式执行此操作.

[youTextField addTarget:self action:@selector(textFieldInputDidChange:) forControlEvents:UIControlEventEditingChanged];
Run Code Online (Sandbox Code Playgroud)

现在,IBAction每次用户更改角色时,您刚刚连接的都会被触发UITextField.创建一个ivar 定时器.现在每次都IBAction被调用,启动计时器,如果它在没有被新呼叫重新启动的情况下达到2秒,你知道用户没有输入/删除的值UITextField.