Вопрос

Я хочу отключить раздражающие клики, которые генерирует 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.Но если вам нужно настроить таргетинг на iPhone Gen1, вы застряли на 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 <UIKit/UIKit.h>

@interface SilintUIPickerView: UIPickerView
{ }

- (void) setSoundsEnabled: (BOOL) enabled;
@end

вместо этого используйте этот подкласс и позвоните [view setSoundsEnabled: NO]

Мне интересно узнать, как обстоят дела в последней версии SDK, попробуйте и дайте нам знать.

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

Возможно, это не ответ на этот конкретный вопрос, но у меня была аналогичная проблема - установите минимальную дату для 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];

установите анимированный:NO для selectRow:метод

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top