Zmagam się z problemem dźwiękowym UIPickerView i chociaż jest to tylko częściowo związane z pierwotnym pytaniem, zamieszczam tutaj problem/rozwiązanie, ponieważ ten temat pojawia się coraz częściej w moich wynikach wyszukiwania, więc myślę, że każdy w innym przypadku w tej samej łodzi może się tutaj skończyć ...
Potrzebowałem zainicjować UIPickerView, aby przywrócić aktualnie wybrany wiersz z zapisanych danych. Proste, prawda? W viewDidLoad, po prostu zadzwoń do selectRow: inComponent: animowane sposób UIPickerView:
[myPicker selectRow:currentRowIndex inComponent:0 animated:NO];
To działa zgodnie z oczekiwaniami, ale ma efekt uboczny, że generuje pojedynczy dźwięk „kliknięcia”, jak gdyby użytkownik miał przewijane kontrolę. Dźwięk kliknięcia występuje tylko podczas działania na urządzeniu (nie symulatorze) i tylko wtedy, gdy urządzenie ma zainstalowany system iOS 3.x (testowałem w wersji 3.1.3 i 3.2). To był najwyraźniej błąd w iOS, który został naprawiony począwszy od iOS 4.0. Ale jeśli potrzebujesz kierować na iPhone'a Gen 1, utkniesz w systemie iOS 3.1.3, gdzie ten problem jest obecny.
Omówiłem tę kwestię z Apple DTS, ale nie byli w stanie zaproponować żadnego obejścia innego niż uaktualnienie do 4.0. Zapytałem, czy zrobią wyjątek i pozwolą na użycie wspomnianego powyżej nieudokumentowanego setSoundsEnabled (co faktycznie rozwiązuje problem). Odpowiedź brzmiała: "Nie ma wyjątków".
Po kilku dodatkowych pracach detektywistycznych odkryłem, że można zapobiec powstawaniu dźwięku, tymczasowo usuwając UIPickerView z podglądu, zadzwoń do selectRow, a następnie dodaj go ponownie do superview.Na przykład, w viewDidLoad:
UIView *superview = [myPicker superview];
[myPicker removeFromSuperview];
[myPicker reloadAllComponents];
[myPicker selectRow:currentRowIndex inComponent:0 animated:NO];
[superview addSubview:myPicker];
ten pozbywa się obcych click dźwięku bez użycia nielegalnych/private API więc należy przejść proces zatwierdzania Apple.
, które działa idealnie! Dziękuję bardzo!! A propos, czy wiesz, jak konkretnie Apple radzi sobie z nieudokumentowanym API? To musi wkrótce trafić do sklepu App Store. Nie chciałbym być odrzucony i przygnębiony z powodu czegoś tak małego :) – infiniteloop
"A tak przy okazji, czy wiesz, jak konkretnie Apple radzi sobie z nieudokumentowanym API?" Naprawdę nie znam odpowiedzi na to pytanie, spróbuj przeszukać to na SO, a jeśli nie zostało już zadane, zapytaj. – hhafez
Ostrzegają cię, jeśli używasz tej metody. –