Подтвердить что ты не робот

Задержка с изменением состояния UIButton

У меня есть подтекст UIButton внутри UITableViewCell.

При нажатии этой кнопки пользователь должен удерживать кнопку примерно на полсекунды, чтобы изображение кнопки изменилось на изображение UIControlStateHighlighted.

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

Почему это происходит и как я могу его исправить?

4b9b3361

Ответ 1

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

Теперь вы можете исправить это, отключив задержкиContentTouches или сняв флажок "Задерживает контент" в представлении таблицы.

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

Ответ 2

Проблема в том, что ваш UIButton находится внутри UITableView. Это означает, что в представлении таблицы необходимо определить, будет ли ваш кран проходить салфетки или если он просто используется для кнопки. В представлении таблицы необходимо отложить отправку сообщения в UIButton, пока он не узнает, что пользователь не намерен прокручивать и, следовательно, прокручивает представление вместо нажатия кнопки.

Если вам не нужен табличный вид, избавьтесь от UITableView.

Ответ 3

Для ответа Дэвида Ходжа.

Я просто хочу добавить способ удалить этот "только отрицательный побочный эффект", уже описанный Дэвидом: если вы начнете прокручивать внутри UIcontrol в UIScrollView с delayContentTouches = NO, прокрутка не работает.

РЕШЕНИЕ Подкласс UIScrollView (или UITableView в качестве исходного вопроса) и переопределить:

-(BOOL) touchesShouldCancelInContentView:(UIView *)view {   
return YES; 
}

Ваш UIControls внутри UIScrollView/UITableView немедленно изменит свое состояние при нажатии, и прокрутки будут прокручиваться, даже если на некоторых UIControl начнется сенсорное нажатие. Работает как шарм.

Ответ 4

Я просто изменяю изображение из метода целевого действия:

[sender setBackgroundImage:[UIImage imageNamed:@"highlighted-image.png"] forState:UIControlStateNormal];

Он мгновенно меняет фоновое изображение.

Ответ 5

Изменить: полностью переписано после непонимания вопроса

Один из способов мышления UIButton - это сокращенный способ настройки области экрана, которая может реагировать на различные мгновенные события прикосновения, ответ, который он делает, определяется системой UIControl Target-Action для доставки сообщений другим объектам.

UIControlEventTouchDown звучит как тот, на который вам нужно ответить. Он будет запущен, как только кто-то коснется вашей кнопки - вот что делает кнопка "Контактная информация" в SMS.

UIButton * myButton = [[UIButton buttonWithType: UIButtonTypeRoundedRect]; //SEt up title, frame и т.д. [myButton addTarget: self action: @selector (myButtonWasPressed) forControlEvents: UIControlEventTouchDown]; [myMainView addSubView: myButton];

Отправляет сообщение -(void)myButtonWasPressed объекту, с которого выполняется этот код (в идеале вы видите контроллер). В myButtonWasPressed вы можете добавить новое представление или предпринять любые действия, которые вам нравятся. Приложение SMS нажимает на контроллер вида для отображения информации о контакте с помощью навигационного контроллера.

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