我可以禁用UIPickerView滚动声音吗?

inf*_*oop 11 iphone cocoa-touch objective-c ipod-touch

我想禁用UIPickerView在向上和向下滚动时生成的恼人点击.有没有办法做到这一点?我想为拾取器视图所依赖的每个项目播放短音.它被内置的声音破坏了.

我知道通过关闭iPhone/iPod设置中的键盘声音可以全局关闭拾音器声音.但有没有办法以编程方式执行此操作?

任何帮助都感激不尽!

谢谢

cbr*_*nch 7

我一直在努力解决UIPickerView声音问题,即使它只与原始问题部分相关,我也在这里发布问题/解决方案,因为这个主题不断出现在我的搜索结果中,所以我想其他人也是如此船也可能在这里结束......

我需要初始化UIPickerView以从保存的数据中恢复当前选定的行.简单吧?在viewDidLoad中,只需调用selectRow:inComponent:UIPickerView的动画方法:

[myPicker selectRow:currentRowIndex inComponent:0 animated:NO];
Run Code Online (Sandbox Code Playgroud)

这可以按预期工作,但有副作用,它产生一个"点击"声音,就像用户滚动控件一样.点击声只在设备(不是模拟器)上运行时发生,并且仅当设备安装了iOS 3.x时(我使用3.1.3和3.2测试).这显然是iOS中的一个错误,从iOS 4.0开始修复.但是如果你需要针对Gen1 iPhone,你就会遇到存在这个问题的iOS 3.1.3.

我讨论了Apple DTS的问题,但除了升级到4.0之外,他们无法提出任何解决方法.我问他们是否会例外并允许使用上面提到的未记录的setSoundsEnabled(这实际上解决了问题).答案是,"没有例外."

经过一些额外的侦探工作,我发现你可以通过暂时从superview中删除UIPickerView来阻止声音发生,调用selectRow,然后将其重新添加到superview.例如,在viewDidLoad中:

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

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

[superview addSubview:myPicker];
Run Code Online (Sandbox Code Playgroud)

这样可以在不使用未记录/私有API的情况下消除无关的点击声音,因此应该通过Apple的审批流程.


ctp*_*ose 5

在App Store上使用这个特定的未记录的api一年多后,Apple终于要求我将其从我的应用程序中删除.对于音频应用程序来说,这个该死的咔嗒声是非常令人沮丧的.最好的建议是与用户分享可以在"声音"下的设置应用程序中全局禁用拾取器声音,并将"键盘点击"设置为"关闭".我还强烈建议访问https://bugreport.apple.com/并为UIPickerView提交一个错误,因为它会在播放选择器点击时导致音频应用程序失真.