11

上下にスクロールするときに UIPickerView が生成する迷惑なクリックを無効にしたいと考えています。これを行う方法はありますか?ピッカー ビューが到達する各アイテムに対して短いサウンドを再生したいと考えています。内蔵の音で台無しになります。

iPhone/iPod の設定でキーボードの音をオフにすることで、ピッカーの音をグローバルにオフにできることを理解しています。しかし、プログラムでこれを行う方法はありますか?

どんな助けでも大歓迎です!

ありがとう

4

8 に答える 8

7

私は UIPickerView のサウンドの問題に苦労してきました。元の質問とは部分的にしか関連していませんが、このトピックが検索結果に表示され続けるため、ここに問題/解決策を投稿しています。船もここにたどり着くかもしれません…</p>

保存されたデータから現在選択されている行を復元するには、UIPickerView を初期化する必要がありました。シンプルですね。viewDidLoad では、UIPickerView の selectRow:inComponent:animated メソッドを呼び出すだけです。

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

これは期待どおりに機能しますが、ユーザーがコントロールをスクロールしたかのように単一の「クリック」音が生成されるという副作用があります。クリック音は、(シミュレーターではなく) デバイスで実行している場合にのみ発生し、デバイスに iOS 3.x がインストールされている場合にのみ発生します (私は 3.1.3 および 3.2 でテストしました)。これは明らかに iOS のバグであり、iOS 4.0 以降で修正されました。しかし、Gen1 iPhone をターゲットにする必要がある場合は、この問題が存在する iOS 3.1.3 に行き詰まっています。

この問題について Apple DTS と話し合いましたが、4.0 にアップグレードする以外の回避策を提案することはできませんでした。例外を設けて、上記の文書化されていない setSoundsEnabled の使用を許可するかどうかを尋ねました (実際に問題を解決します)。その答えは、「例外はありません」でした。

追加の調査作業の後、UIPickerView をスーパービューから一時的に削除し、selectRow を呼び出してから、スーパービューに再度追加することで、サウンドの発生を防ぐことができることを発見しました。たとえば、viewDidLoad では次のようになります。

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

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

[superview addSubview:myPicker];

これにより、文書化されていない/プライベート API を使用せずに余分なクリック音が取り除かれるため、Apple の承認プロセスに合格するはずです。

于 2010-11-04T04:35:22.380 に答える
5

この特定の文書化されていない API を App Store で 1 年以上使用した後、Apple はついにアプリから削除するように求めました。オーディオ アプリがクリック音を出すのは非常にイライラします。最良のアドバイスは、「サウンド」の下の設定アプリケーションでピッカーサウンドをグローバルに無効にし、「キーボードクリック」を「オフ」に設定できることをユーザーと共有することです。また、 https: //bugreport.apple.com/ にアクセスして UIPickerView のバグを報告する ことを強くお勧めします。これは、ピッカー クリックの再生時にオーディオ アプリケーションで歪みが発生する可能性があるためです。

于 2010-04-05T06:22:49.700 に答える
2

文書化されていない API を使用しているため、彼らは私のアプリを拒否しました...それもその 1 つです。

于 2010-03-10T09:24:15.313 に答える
1

これはこの特定の質問に対する答えではないかもしれませんが、同様の問題がありました.datePickerにminimumDateを設定し、迷惑な「クリック」音なしで設定したかったのです。しばらくして、非常に簡単な解決策が見つかりました。

datePickerCustomTime.minimumDate = [[NSDate date] dateByAddingTimeInterval:300]// min time to set = now + 5 min
  [datePickerCustomTime setDate:[[NSDate date] dateByAddingTimeInterval:300] animated:NO];
于 2015-10-23T11:55:43.783 に答える
1

文書化されていない方法があります (iPhone 3.0 でまだ利用できるかどうかは実際にはわかりません) が、ここではどのような方法でもかまいません。

#import <UIKit/UIKit.h>

@interface SilintUIPickerView: UIPickerView
{ }

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

代わりにこのサブクラスを使用して呼び出します[view setSoundsEnabled: NO]

最新の SDK でどのように動作するか知りたいので、試してみて、お知らせください。

于 2009-09-17T23:59:43.973 に答える