iPhone - ловить события UIButton, если держать нажатой - PullRequest
0 голосов
/ 10 марта 2011

Я хотел бы отлавливать события нажатой кнопки UIB каждые 0,2 секунды.Я имею в виду, что я хочу, чтобы IBAction, предназначенный для кнопки, запускался каждые 0,2 секунды, когда нажата кнопка UIB.Я попробовал какой-то код, найденный в сети, и я понимаю, что мне нужно использовать таймер.Но при этом я теряю атрибут «отправитель», который мне нужен в моем методе catch.

Как мне добиться этого?

Ответы [ 4 ]

2 голосов
/ 10 марта 2011

Когда вы создаете NSTimer, вы можете прикрепить к нему пользовательский объект в виде поля userInfo (например, проверьте документы для +scheduledTimerWithTimeInterval:target:selector:userInfo:repeats: method - параметр userInfo).

Таким образом, вы можете передать своего отправителя, используя поле userInfo.

1 голос
/ 01 сентября 2011

Вам не нужно использовать таймер, вы можете реализовать:

  • (void) touchesBegan: (NSSet *) затрагивает событие Event: (UIEvent *);
  • (void) touchesEnded: (NSSet *) касается события EventEvent: (UIEvent *);

событий для кнопки.

Вы можете сделать что-то вроде этого, если ожидаете, что кнопка будет нажата в порядке секунд:

#import <Foundation/Foundation.h>

@interface FancyButton: UIButton
{

}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event ;
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
@end



#import "FancyButton.h"

NSTimeInterval buttonPressedTime;

@implementation FancyButton
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{  
    buttonPressedTime = [event timestamp];
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{  
    if([event timestamp] - buttonPressedTime) > your_desired_press_time)
    {
        [self your_fancy_message]; // or any other processing you will do
    }
   buttonPressedTime = 0;
}
@end

Надеюсь, это поможет.

0 голосов
/ 10 марта 2011

Я мог бы предложить лучший совет, если бы увидел какой-то код, но когда вы планируете запускать селектор, вы можете назначить целевой объект. Пока объект может получить доступ к вашему отправителю, вы в порядке.

Что бы я сделал в вашем случае (если я вас правильно понял), чтобы обновлял целевой объект вместе с отправителем: когда нажата кнопка UIB, обновите целевой объект с помощью кнопки UIB.

0 голосов
/ 10 марта 2011

Если ваш таймер настроен и работает должным образом, все, что вам нужно, это какая-то ссылка на нажатую кнопку.Вы можете создать iVar в своем классе вместе со свойством и установить его в обработчике событий touchDownInside.Затем проверьте это в методе таймера.

...