Pregunta

Deseo deshabilitar los molestos clics que genera UIPickerView al desplazarse hacia arriba y hacia abajo. ¿Hay alguna forma de hacer esto? Quiero reproducir sonidos cortos para cada elemento sobre el que cae la vista del selector. Se arruina por el sonido incorporado.

Entiendo que los sonidos del selector se pueden desactivar globalmente apagando los sonidos del teclado en la configuración de iPhone / iPod. Pero, ¿hay alguna manera de hacer esto programáticamente?

¡Cualquier ayuda será muy apreciada!

Gracias

¿Fue útil?

Solución

Después de usar esta API indocumentada específica durante más de un año en la App Store, Apple finalmente me pidió que la eliminara de mi aplicación. Es muy frustrante para las aplicaciones de audio tener ese maldito sonido de clic. El mejor consejo es compartir con los usuarios que el sonido del selector se puede deshabilitar globalmente en la aplicación de configuración en "Sonidos". y la configuración de "Clics del teclado" a "Apagado". También recomiendo visitar https://bugreport.apple.com/ y presentar un error para UIPickerView, ya que puede causar distorsión en las aplicaciones de audio cuando se reproduce el clic del selector.

Otros consejos

He estado luchando con un problema de sonido de UIPickerView, y aunque solo es parcialmente relevante para la pregunta original, estoy publicando el problema / solución aquí porque este tema sigue apareciendo en mis resultados de búsqueda, así que creo que alguien más en el mismo barco puede terminar aquí también & # 8230;

Necesitaba inicializar un UIPickerView para restaurar la fila seleccionada actualmente de los datos guardados. Simple, verdad? En viewDidLoad, simplemente llame al selectRow: inComponent: método animado de UIPickerView:

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

Esto funciona como se esperaba, pero tiene el efecto secundario de que genera un solo "clic". suena como si el usuario hubiera desplazado el control. El sonido de clic solo ocurre cuando se ejecuta en un dispositivo (no en el simulador), y solo si el dispositivo tiene instalado iOS 3.x (probé con 3.1.3 y 3.2). Aparentemente, este fue un error en iOS que se solucionó a partir de iOS 4.0. Pero si necesita apuntar al iPhone Gen1, está atascado con iOS 3.1.3 donde este problema está presente.

Discutí el problema con Apple DTS, pero no pudieron sugerir ninguna otra solución que no sea la actualización a 4.0. Pregunté si harían una excepción y permitirían el uso del setSoundsEnabled no documentado mencionado anteriormente (que en realidad resuelve el problema). La respuesta fue: "No hay excepciones".

Después de un trabajo de detective adicional, descubrí que puede evitar que se produzca el sonido eliminando temporalmente el UIPickerView de la supervista, llame a selectRow y luego vuelva a agregarlo a la supervista. Por ejemplo, en viewDidLoad:

UIView *superview = [myPicker superview];
[myPicker removeFromSuperview];

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

[superview addSubview:myPicker];

Esto elimina el sonido de clics extraños sin usar API indocumentadas / privadas, por lo que debería pasar el proceso de aprobación de Apple.

acaban de rechazar una aplicación mía porque el uso de API indocumentadas ... esa es una de ellas.

Alguien que conozco dice que pasó la revisión de la App Store la semana pasada:

// 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);
}

Hay una forma indocumentada (en realidad no estoy seguro de si todavía está disponible en iphone 3.0) pero aquí está de cualquier manera

#import <UIKit/UIKit.h>

@interface SilintUIPickerView: UIPickerView
{ }

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

use esta subclase en su lugar y llame a [view setSoundsEnabled: NO]

Estoy interesado en saber cómo funciona el último SDK, pruébalo y dinos.

¿Podría funcionar este truco? Alguien pudo suprimir el efecto de sonido del obturador de la cámara al reproducir una copia invertida del sonido en el mismo momento: https://stackoverflow.com / a / 23758876/214070

Tal vez esta no sea la respuesta para esta pregunta en particular, pero tuve un problema similar: establezca el mínimo de fecha para datePicker, y quería configurarlo sin molestar "clic". sonar. Después de un tiempo encontró una solución muy simple:

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

Encontré una pequeña solución rápida para este intento a continuación

        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];

establezca el animado: NO para selectRow: método

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top