对结束编辑执行操作

时间:2011-05-18 01:59:55

标签: objective-c cocoa macos nstextfield

我的Objective-C Mac应用程序中有一个文本字段。

这就是我想要的:当我停止在文本字段中写入超过5秒时,它会运行一些东西。这可能吗?

如果是这样,有人可以解释一下吗?

2 个答案:

答案 0 :(得分:3)

  1. 确保已打开文本字段的连续选项。
  2. 将文本字段的代理连接到控制器。
  3. 在您的控制器中实施controlTextDidChange:
  4. 每次收到controlTextDidChange:时启动计时器(并使旧计时器无效)。
  5. 以下是一个例子:

    - (void)controlTextDidChange:(NSNotification *)notification
    {
       if (timeoutTimer != nil) {
          [timeoutTimer invalidate];
          [timeoutTimer release];
          timeoutTimer = nil;
       }
    
       timeoutTimer = [[NSTimer 
          scheduledTimerWithTimeInterval:5.0
          target:self
          selector:@selector(doSomething)
          userInfo:nil
          repeats:NO] retain];
    }
    

答案 1 :(得分:1)

使用-performSelector:withObject:afterDelay:,如果用户再次开始输入,则取消执行请求。这是一个粗略的例子:

- ( void )controlTextDidChange: (NSNotification *)notification
{
    if ( [ notification object ] != myTextField ) {
        return;
    }

    [ NSObject cancelPreviousPerformRequestsWithTarget: self
               selector: @selector( userStoppedEditing: )
               object: myTextField ];
    [ self performSelector: @selector( userStoppedEditing: )
           withObject: myTextField
           afterDelay: 5.0 ];
}