Posso disabilitare il suono di scorrimento UIPickerView?

Voglio disabilitare i fastidiosi clic generati da UIPickerView durante lo scorrimento su e giù. C’è un modo per fare questo? Voglio suonare suoni corti per ogni object su cui si basa la vista del raccoglitore. Viene rovinato dal suono integrato.

Capisco che i suoni del picker possono essere distriggersti ​​a livello globale distriggersndo i suoni della tastiera nelle impostazioni dell’iPhone / iPod. Ma c’è un modo per farlo in modo programmatico?

Qualsiasi aiuto sarà molto apprezzato!

Grazie

Dopo aver utilizzato questa app per documenti non documentata per oltre un anno su App Store, Apple mi ha chiesto di rimuoverla dalla mia app. È molto frustrante per le app audio avere quel maledetto suono. Il miglior consiglio è quello di condividere con gli utenti che il suono del picker può essere disabilitato globalmente nell’applicazione delle impostazioni in “Suoni” e l’impostazione “Clic della tastiera” su “Off”. Raccomando inoltre vivamente di visitare https://bugreport.apple.com/ e di archiviare un bug per UIPickerView, poiché può causare distorsioni nelle applicazioni audio quando si fa clic sul selettore.

Ho avuto problemi con un problema audio di UIPickerView, e anche se è solo parzialmente pertinente alla domanda originale, sto postando il problema / la soluzione qui perché questo argomento continua a venire nei miei risultati di ricerca, quindi penso che chiunque altro sia nella stessa la barca potrebbe finire qui anche …

Avevo bisogno di inizializzare un UIPickerView per ripristinare la riga attualmente selezionata dai dati salvati. Semplice, vero? In viewDidLoad, basta chiamare selectRow: inComponent: metodo animato di UIPickerView:

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

Funziona come previsto, ma ha un effetto collaterale che genera un singolo “clic” come se l’utente avesse fatto scorrere il controllo. Il suono del clic si verifica solo quando è in esecuzione su un dispositivo (non sul simulatore) e solo se sul dispositivo è installato iOS 3.x (ho provato con 3.1.3 e 3.2). Questo è apparentemente un bug in iOS che è stato risolto a partire da iOS 4.0. Ma se hai bisogno di indirizzare l’iPhone Gen1, sei bloccato con iOS 3.1.3 dove questo problema è presente.

Ho discusso il problema con Apple DTS, ma non sono stati in grado di suggerire soluzioni alternative oltre all’aggiornamento alla 4.0. Ho chiesto se avrebbero fatto un’eccezione e permesso l’uso del setSoundsEnabled non documentato di cui sopra (che in realtà risolve il problema). La risposta è stata: “Non ci sono eccezioni”.

Dopo un po ‘di lavoro investigativo aggiuntivo, ho scoperto che è ansible impedire che il suono si verifichi rimuovendo temporaneamente UIPickerView dalla superview, chiama selectRow, quindi aggiungilo nuovamente al superview. Ad esempio, in viewDidLoad:

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

Questo elimina il suono del clic estraneo senza utilizzare API private non documentate, quindi dovrebbe passare il processo di approvazione di Apple.

hanno appena rifiutato una mia app perché usa le API non documentate … questo è uno di loro.

Qualcuno che conosca dice che ha superato la recensione di App Store proprio la scorsa settimana:

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

C’è un modo non documentato (in realtà non sono sicuro se è ancora disponibile in iPhone 3.0) ma qui è in ogni modo

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

usa questa sottoclass e chiama [view setSoundsEnabled: NO]

Mi interessa sapere come va nell’ultimo SDK, darci una possibilità e farci sapere.

Questo trucco potrebbe funzionare? Qualcuno è stato in grado di sopprimere l’effetto sonoro dell’otturatore della fotocamera riproducendo una copia invertita del suono nello stesso momento: https://stackoverflow.com/a/23758876/214070

Forse questa non è la risposta a questa particolare domanda, ma ho avuto un problema simile: ho impostato minimumDate per datePicker e volevo impostarlo senza fastidioso suono “click”. Dopo qualche tempo ho trovato una soluzione molto semplice:

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

Ho trovato una piccola soluzione rapida per questa prova qui sotto

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

imposta l’animazione: NO per selectRow: method