Tôi đã đấu tranh với vấn đề âm thanh UIPickerView và mặc dù nó chỉ liên quan một phần đến câu hỏi ban đầu, tôi đăng vấn đề/giải pháp ở đây vì chủ đề này tiếp tục xuất hiện trong kết quả tìm kiếm của tôi khác trong cùng một thuyền cũng có thể kết thúc ở đây…
Tôi cần khởi tạo UIPickerView để khôi phục hàng hiện được chọn từ dữ liệu đã lưu. Đơn giản, phải không? Trong viewDidLoad, chỉ cần gọi các selectRow: inComponent: Phương pháp hoạt hình của UIPickerView:
[myPicker selectRow:currentRowIndex inComponent:0 animated:NO];
này hoạt động như mong đợi, nhưng có một tác dụng phụ mà nó tạo ra một đĩa đơn "click" âm thanh như nếu người dùng đã cuộn điều khiển. Âm thanh nhấp chỉ xảy ra khi chạy trên thiết bị (không phải trình mô phỏng) và chỉ khi thiết bị đã cài đặt iOS 3.x (tôi đã thử nghiệm với 3.1.3 và 3.2). Đây rõ ràng là lỗi trong iOS đã được khắc phục bắt đầu với iOS 4.0. Nhưng nếu bạn cần nhắm mục tiêu đến Gen1 iPhone, bạn đang mắc kẹt với iOS 3.1.3, nơi có vấn đề này.
Tôi đã thảo luận vấn đề với Apple DTS, nhưng họ không thể đề xuất bất kỳ giải pháp nào khác ngoài nâng cấp lên 4.0. Tôi hỏi nếu họ sẽ làm cho một ngoại lệ và cho phép sử dụng các setSoundsEnabled không có giấy tờ nêu trên (mà thực sự giải quyết vấn đề). Câu trả lời là, "Không có ngoại lệ."
Sau một số công việc thám tử bổ sung, tôi phát hiện ra rằng bạn có thể ngăn chặn âm thanh xảy ra bằng cách tạm thời xóa UIPickerView khỏi superview, gọi selectRow, sau đó thêm lại vào superview.Ví dụ: trong chế độ xemDidLoad:
UIView *superview = [myPicker superview];
[myPicker removeFromSuperview];
[myPicker reloadAllComponents];
[myPicker selectRow:currentRowIndex inComponent:0 animated:NO];
[superview addSubview:myPicker];
Điều này loại bỏ âm thanh nhấp không liên quan mà không sử dụng các API không có giấy tờ/riêng nên bạn phải vượt qua quy trình phê duyệt của Apple.
hoạt động hoàn hảo! cảm ơn bạn rất nhiều!! Nhân tiện, bạn có biết Apple đặc biệt như thế nào với API không được đăng ký không? Điều này cần sớm được tung vào cửa hàng ứng dụng. Sẽ không muốn bị từ chối và bị từ chối vì một thứ quá nhỏ :) – infiniteloop
"Nhân tiện, bạn có biết Apple đặc biệt với API không có giấy tờ không đẹp mắt không?" Tôi thực sự không biết câu trả lời cho câu hỏi đó, hãy thử tìm kiếm nó trên SO và nếu nó chưa được hỏi, hãy hỏi nó. – hhafez
Hiện tại, họ cảnh báo bạn nếu bạn sử dụng phương pháp này. –