Выполнение действия по окончанию редактирования - PullRequest
2 голосов
/ 18 мая 2011

В моем приложении Objective-C Mac есть текстовое поле.

Это то, что я хочу: когда я прекращаю запись в текстовом поле более чем на 5 секунд, он запускает что-то. Это возможно?

Если это так, может кто-нибудь объяснить, как?

Ответы [ 2 ]

3 голосов
/ 18 мая 2011
  1. Убедитесь, что опция непрерывного текстового поля включена.
  2. Подключите делегат текстового поля к контроллеру.
  3. Внедрите controlTextDidChange: в свой контроллер.
  4. Запуск таймера (и аннулирование старого) каждый раз, когда вы получаете controlTextDidChange:.

Вот пример:

- (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 голос
/ 18 мая 2011

Используйте -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 ];
}
...