Могу ли я отключить прокрутку звука UIPickerView?

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

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

Любая помощь будет высоко ценится!

благодаря

После использования этого конкретного недокументированного api в течение года в App Store Apple, наконец, попросила меня удалить его из моего приложения. Это очень неприятно для звуковых приложений, которые имеют этот проклятый звук щелчка. Лучший совет – поделиться с пользователями тем, что звук выбора может быть отключен глобально в приложении настроек в разделе «Звуки» и установке «Клавишные клики» на «Выкл.». Я также настоятельно рекомендую посетить https://bugreport.apple.com/ и подавать ошибку для UIPickerView, так как это может вызвать искажение в звуковых приложениях при нажатии на щелчок выбора.

Я борется с проблемой звука UIPickerView, и хотя это только частично относится к исходному вопросу, я размещаю проблему / решение здесь, потому что этот вопрос продолжает появляться в моих результатах поиска, поэтому я думаю, что кто-то еще в одном и том же лодка может оказаться здесь тоже …

Мне нужно было инициализировать UIPickerView для восстановления текущей выбранной строки из сохраненных данных. Простой, не так ли? В viewDidLoad просто вызовите selectRow: inComponent: анимированный метод UIPickerView:

[myPicker selectRow:currentRowIndex inComponent:0 animated:NO]; 

Это работает так, как ожидалось, но имеет побочный эффект, что он генерирует один «щелчок», как если бы пользователь прокрутил элемент управления. Звук щелчка возникает только при работе на устройстве (а не в симуляторе), и только если на устройстве установлено iOS 3.x (я тестировал с 3.1.3 и 3.2). По-видимому, это была ошибка в iOS, которая была исправлена ​​с iOS 4.0. Но если вам нужно ориентироваться на Gen1 iPhone, вы застряли с iOS 3.1.3, где эта проблема присутствует.

Я обсуждал эту проблему с Apple DTS, но они не могли предложить никаких обходных решений, кроме обновления до 4.0. Я спросил, будут ли они делать исключение и разрешить использование недокументированного setSoundsEnabled, упомянутого выше (что фактически решает проблему). Ответ был: «Исключений нет».

После некоторой дополнительной детективной работы я обнаружил, что вы можете предотвратить появление звука, временно удалив UIPickerView из супервизора, вызовите selectRow, а затем снова добавьте его в супервизор. Например, в viewDidLoad:

 UIView *superview = [myPicker superview]; [myPicker removeFromSuperview]; [myPicker reloadAllComponents]; [myPicker selectRow:currentRowIndex inComponent:0 animated:NO]; [superview addSubview:myPicker]; 

Это избавляет от постороннего звука щелчка, не используя недокументированные / частные API, поэтому должен пройти процесс утверждения Apple.

они только что отклонили мое приложение, потому что использование недокументированных api … это один из них.

Кто-то, кого я знаю, говорит, что он прошёл последнюю версию App Store только на прошлой неделе:

 // Hide private API call from Apple static analyzer SEL sse = NSSelectorFromString([NSString stringWithFormat:@"%@%@%@", @"set",@"Sounds",@"Enabled:"]); if ([UIPickerView instancesRespondToSelector:sse]) { IMP sseimp = [UIPickerView instanceMethodForSelector:sse]; sseimp(self.thePicker, sse, NO); } 

Существует недокументированный способ (я на самом деле не уверен, что он все еще доступен в iphone 3.0), но здесь он каким-либо образом

 #import  @interface SilintUIPickerView: UIPickerView { } - (void) setSoundsEnabled: (BOOL) enabled; @end 

используйте этот подclass и вызовите [view setSoundsEnabled: NO]

Мне интересно узнать, как это происходит в последнем SDK, дать ему шанс и сообщить нам об этом.

Может ли этот трюк работать? Кто-то смог подавить звуковой эффект затвора камеры, воспроизведя перевернутую копию звука в тот же момент: https://stackoverflow.com/a/23758876/214070

Возможно, это не ответ на этот конкретный вопрос, но у меня была аналогичная проблема – установите minimumDate для datePicker, и я хотел установить его без раздражающего звука «щелчка». Через некоторое время было найдено очень простое решение:

 datePickerCustomTime.minimumDate = [[NSDate date] dateByAddingTimeInterval:300]// min time to set = now + 5 min [datePickerCustomTime setDate:[[NSDate date] dateByAddingTimeInterval:300] animated:NO]; 

Я нашел небольшое быстрое решение для этой попытки ниже

  UIPickerView *pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, yPickerView, VIEW_WIDTH, PICKERVIEW_HEIGHT)]; pickerView.delegate = self; pickerView.dataSource = self; pickerView.showsSelectionIndicator = YES; pickerView.alpha = 0.8f; pickerView.tag = fieldTag; [pickerView selectRow:pickerViewSelectedIndex inComponent:0 animated:NO]; 

установить анимированный: НЕТ для selectRow: метод

Interesting Posts
Давайте будем гением компьютера.