1

k、私はこれに慣れていないので、一般的に謝罪します。

別のビューとクラスから UISwitch 値 (オンまたはオフ) にアクセスしようとしていますが、うまくいきません。

シンプルな2ビューアプリです。メイン ビューと 2 番目は設定メニューです。

スイッチ (他のビュー) がオフのときではなくオンのときにサウンドを再生する if/else メソッドを作成しようとしています。

私はそれを機能させることができないようです。考えや構文の例があれば、本当に役に立ちます。

ありがとう。

4

3 に答える 3

4

Matt Wilding が言ったように、「あるビュー コントローラーから別のビュー コントローラーの UI コンポーネントにアクセスするのは良い形ではありません...」。

ビューオブジェクトにアクセスする代わりに、スイッチの状態がユーザーによって変更されたときに、ステータスを設定値として NSUserDefaults に保存します。必要に応じて、設定からスイッチのステータス値にアクセスできます。

于 2011-01-21T05:34:20.387 に答える
1

ここで達成しようとしていると思われることを取り上げ、別のアプローチを提案します。アプリでバックグラウンド ミュージックを再生するかどうかなどをユーザーが設定できるようにする設定 (「設定メニュー」から想定) をアプリに設定する必要があります。(正確ではないかもしれません。これは明確にするためです)。

通常、適切に設計されたアプリでは、フローはデータによって駆動され、UI はデータ モデルの状態を反映し、コントローラーは 2 つのレイヤーを調整します。あなたが提案しているのは、データモデルに支えられていないUIの状態に基づいてアプリケーションに音楽を再生させることです。これはモデル レベルをカットするものであり、お気づきのように、異なるコントローラーの UI 間で情報をやり取りしようとする厄介な試みにつながる可能性があります。

アプリケーションの設定などは、通常、NSUserDefaults クラスで管理される気の利いた .plist ファイルに格納されます。これは、好みのデータ レベルの追跡に最適な場所です。この場合、UISwitch は設定ファイル内のフラグの状態を表し、スイッチの値を変更するとファイル内の値が変更されます。play-sound-flag が設定されているかどうかを知る必要があるアプリケーションの他の場所では、UI の代わりにデータ モデル情報を参照します。これにより、View Controller が互いに分離されます。これは良いことです。

于 2011-01-21T06:13:53.267 に答える
0

この目的のために、swith のセレクターを追加し、アプリのデリゲートで NSInteger プロパティを作成します。

[

yourSwitch addTarget:self action:@selector(switched:) forControlEvents:UIControlEventValueChanged];

-(IBAction) switched: (id)sender
{
    int state=0;
    if(yourSwitch.on)
        state=1;
    else
             state=0;

 objAppDelegate.switchState=state;
}

次に、サウンドを再生している2番目のビューでこのappDelegateプロパティにアクセスする必要があります。この値に従って、必要なことを行うことができ、appDelegateクラスのオブジェクトを作成するには、この行が必要です

YourAppDelegateClass *objAppDelegate=(YourAppDelegateClass *)[[UIApplication sharedApplication] delegate];

他に疑問がある場合は、尋ねることができます。

于 2011-01-21T05:38:40.507 に答える