2013-07-19 4 views
0

Есть три UIButton События доступен:Требуется однократное нажатие и событие двойного касания на UIButton?

  • UITouchUPInside
  • UITouchDown
  • UITouchDownRepeat

Моей проблема:

У меня есть кнопка (Play-Pause). В первый раз его кнопка воспроизведения воспроизведения, если пользователь нажимает на нее, начинает мой процесс. И изменения Кнопка изображения на паузу и помечать изменения в 1.

Если пользователь нажатием на кнопку паузы, она приостанавливает процесс изменения и изображения для воспроизведения и метки к 0.

Теперь моя проблема, что делать, если пользователь нажимает несколько раз, но не выполняется должным образом. Как дважды щелкните мышью на рабочем столе.

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

Если его двойной кран, а также процесс следует запускать только один раз.

Просьба предложить.

Edit: В настоящее время мы используем TouchUpInside только событие, то мы проверяем

if (btn.tag == 0) { 

// change to pause button 
// start process 

btn.tag = 1; 
} 
else if (btn.tag == 1) { 

// change to play button 
// stop process 

btn.tag = 0; 
} 

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

+0

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

+0

Проверьте, что я коротко добавил свою проблему в качестве Редактирования; – Mrunal

+0

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

ответ

4

Возможно, вместо UIButton вы должны использовать UIView с 2 UITapGestureRecognizers? Один из них имел бы numberOfTapsRequired = 2, другой - numberOfTapsRequired = 1. Использовать метод требуетGestureRecognizerToFail, чтобы убедиться, что вы не будете иметь оба вызова своих целевых методов. Затем вы можете добавить любую логику, необходимую для обработки крана.

EDIT: На самом деле, хотя вышеприведенный ответ является обходным путем, он будет терпеть неудачу, если пользователь ударит 3 или более раз. И так как вы не можете сделать распознаватель жестов для каждого количества отводов от 1 до бесконечности, в некоторых случаях это не удастся. Попробуйте следующее:

btn.enabled = NO; 
if (btn.tag == 0) { 

// change to pause button 
// start process 

btn.tag = 1; 
} 
else if (btn.tag == 1) { 

// change to play button 
// stop process 

btn.tag = 0; 
} 
btn.enabled = YES; 
+0

спасибо, я попробую это – Mrunal

+0

Привет, я пробовал это, добавив распознаватель жестов в uibutton в своем классе ячеек. Но любой из этих методов не вызван. – Mrunal

+0

Если вы используете UIGestureRecognizers, вам действительно не нужен UIButton - простого UIView будет достаточно. – johnyu

0

Вам не нужно обращаться с двойными кранами, вы не правильно управляете кнопкой.

Попробуйте это для действия с вашей кнопкой и установите правильные изображения для значений по умолчанию/выбранных состояний кнопки.

- (void)handleButtonAction:(UIButton *)sender { 

    [sender setSelected:![sender isSelected]]; 

    if ([sender isSelected]) { 

     //Play 

    } else { 

     //Pause 

    } 

} 

 Смежные вопросы

  • Нет связанных вопросов^_^