Реализуйте длительное нажатие на кнопку и покажите кнопку удаления поверх этой кнопки, как удаление приложения из фона - PullRequest
3 голосов
/ 04 октября 2011

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

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

UILongPressGestureRecognizer *longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(deleteAppFromList:)];
UIButton *btn=(UIButton *)[cell.contentView viewWithTag:101+i];
[btn addGestureRecognizer:longPressGesture];
[longPressGesture release];

Пожалуйста, предложите мне, как реализовать это. Я хочу сделать функциональность так же, как когда мы удаляем приложение с устройства или симулятора ios.

Ответы [ 3 ]

3 голосов
/ 04 октября 2011

Я только что сделал нечто подобное. Я обнаруживаю событие touchDown, планирую синхронизированный метод, который устанавливает флаг через 1 секунду, затем, когда обнаруживается событие касания, он проверяет флаг и вызывает соответствующий метод.

[myButton addTarget:self action:@selector(itemTouchDown) forControlEvents:UIControlEventTouchDown];
[myButton addTarget:self action:@selector(itemTouchUpInside) forControlEvents:UIControlEventTouchUpInside];

-(void)itemHoldTimer:(NSTimer *)timer
{
    self.itemHoldTimer = nil;
    didHold = YES;
}

-(void)itemTouchDown{
    didHold = NO;
    self.itemHoldTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(itemHoldTimer:) userInfo:nil repeats:NO]; 
}

-(void)itemTouchUpInside {
    if (didHold) {
        didHold = NO;
        [self itemWasTouchedUpAndDidHold];
    } else {
        didHold = NO;
        [self itemWasTouchedUp];
    }
}
0 голосов
/ 04 октября 2011

В методе-обработчике распознавателя длинных нажатий используйте свойство view и его тег для идентификации представления.

-(void)handleLongPress:(UILongPressGestureRecognizer*)longPressRecognizer 
{
    //longPressRecognizer.view.tag
}
0 голосов
/ 04 октября 2011

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

- (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer;

Распознаватель имеет свойство 'view', котороеявляется видом, к которому прикреплен распознаватель.Используйте это напрямую или получите тег этого представления, и вы сможете определить, какая кнопка была нажата.

UIView *myButton = gestureRecognizer.view;

Сказав это, добавление распознавателя жестов к каждой кнопке кажется неправильным способом сделать это.Я хотел бы создать собственный элемент управления и обрабатывать сразу «touchesBegan» и «touchesEnded».

...