0

これはおそらく単純です。私のxibからの私のUISwitchは、IBOutlet「スイッチ」に接続されています。

ただし、viewController を作成するときに、変数が YES/NO かどうかを確認したいのですが、スイッチは正しい値でなければなりません。

ViewController *vc = [[ViewController alloc] init];
if(variable ==YES){
   [vc.switch setOn:YES];
}else{
    [vc.switch setOn:NO];
}

ただし、常にチェックされていません。私は何が間違っているのでしょうか?IBOutlet への接続を再確認しました

4

3 に答える 3

3

正しいメソッドを呼び出していません。メソッドUISwitchを持っていません。プロパティとメソッドsetOnがあります。onsenOn:animated:

また:

ViewController *vc = [[ViewController alloc] init];
vc.switch.on = variable

また:

ViewController *vc = [[ViewController alloc] init];
[vc.switch setOn:variable animated:YES];

すでに BOOL に対してチェックしていることに注意してください。不必要なチェックなしでそれを行う方法を示しました。

于 2013-07-29T13:12:02.197 に答える
1

これは、新しい開発者が抱える最も一般的な問題です。実際、私はかつて同じ問題を抱えていました。その時、私はこれが起こった理由を知りません。私は今、そのような問題について明確になったと思います。

ヒントをいくつか教えてください。

  1. UIViewビューコントローラーを提示またはプッシュする前に、コントロールにアクセスしないでください。提示/プッシュ後に UIView コントロールにアクセスできます。
  2. ブール値も設定することでこれを実現できます。deafultSwitchStatusこの値はブール型であるため、ブール型のプロパティを作成しますviewDidLoadUISwitchこのステータスをオブジェクトに割り当てることができますviewDidLoad.

要するに。コントロールはメソッドのUIView前に作成/ロードされず、コントローラーのプリセット/プッシュ後に呼び出されます。提示/プッシュする前にアクセスしている場合、コントロールはゼロであることを意味します。これらのコントロールは上書きされるため、コードに影響を与えません。viewDidLoadviewDidLoad

私が正しく説明したことを願っています:)

于 2013-07-29T13:55:35.810 に答える
0

ViewController を作成しましたが、提示していません。したがって、loadView は呼び出されず、あなたの .switch は nil です。これを試して:

ViewController *vc = [[[ViewController alloc] init] autorelease];
[self presentViewController:vc
                   animated:YES
                 completion:^(){
    vc.switch.on = variable;
}];
于 2013-07-29T13:18:05.070 に答える