Как программно определить, произошло ли событие «touchUpInside»? - PullRequest
1 голос
/ 23 мая 2009

Похоже, этот метод будет вызываться каждый раз, когда пользователь касается моего вида:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    if ([touch view] == self && [touch tapCount] >= 1) {
        // do something...
    }
}

Я реализовал это в UIScrollView. В документации по UIEvent не упоминаются те события touchUpInside, touchUpOutside и т. Д., Которые доступны в Интерфейсном Разработчике при установлении соединений с методами действий.

На самом деле я хочу, чтобы метод вызывался только для одного из этих событий "touchUpInside", а не для любого касания.

Ответы [ 5 ]

3 голосов
/ 23 мая 2009

Вы хотите touchesEnded:withEvent:. Метод touchesBegan вызывается, когда в UIResponder начинается касание или серия касаний; метод touchesEnded вызывается, когда выполняется эта серия касаний (т.е. ваш пользователь перестает касаться экрана / поднимает палец).

1 голос
/ 18 ноября 2011

Вот как я связываю IBAction с текстовым полем:

[yourTextField addTarget:self action:@selector(your method:) forControlEvents:UIControlEventTouchUpInside];
1 голос
/ 23 мая 2009

Канонический способ - создать IBAction и подключить его к событию touchUpInside в InterfaceBuilder.app.

Каждый раз, когда происходит TouchUpInside, будет вызван ваш IBAction.

Если вы создаете программно, вне IB, вы все равно можете подключить IBAction.

0 голосов
/ 23 апреля 2019

Из документации UIControlEventTouchUpInside .

Событие касания в элементе управления, когда палец находится в пределах элемента управления.

AFAICS, вам нужно реализовать touchesEnded:withEvent:.


    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {

        if let point = touches.first?.location(in: self), self.point(inside: point, with: event) {
            //didTouchUpInside
        }
    }

Если вы переопределите этот метод без вызова super (шаблон общего использования), вы также должны переопределить другие методы для обработки сенсорных событий, даже если ваши реализации ничего не делают.

0 голосов
/ 02 августа 2013

Техника Vadoff изящна, однако не забудьте очистить событие касания, вызвав суперфункцию. Вот полный код.

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {

    BOOL touchedUpInside = NO;
    if (self.isTouchUpInside) {
        touchedUpInside = YES;
    }

    [super touchesEnded:touches withEvent:event];    

    if (touchedUpInside) {
        // touched up inside
    } 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...