Задержка с изменением состояния UIButton
У меня есть подтекст UIButton
внутри UITableViewCell
.
При нажатии этой кнопки пользователь должен удерживать кнопку примерно на полсекунды, чтобы изображение кнопки изменилось на изображение UIControlStateHighlighted
.
Это означает, что если пользователь просто нажимает кнопку, как обычно, выделенное состояние никогда не отображается.
Почему это происходит и как я могу его исправить?
Ответы
Ответ 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 нажимает на контроллер вида для отображения информации о контакте с помощью навигационного контроллера.
Если это еще не решит вашу проблему, вам нужно будет опубликовать некоторый код, чтобы лучше понять, что происходит не так.