0

アプリがカメラを起動するたびに表示されるオーバーレイにスイッチを設定しました。スイッチが表示されます。これで問題ありません。しかし、スイッチがオンまたはオフのときにアクションを実行するように命令する if 条件を作成するにはどうすればよいでしょうか?

//This is the overlay.
- (UIView*)CommomOverlay  {

UISwitch *mySwitch = [[UISwitch alloc] initWithFrame:CGRectMake (30,400,20,20)];
[mySwitch addTarget:self action:@selector(mySwitch)  
forControlEvents:UIControlEventAllTouchEvents];

[view addSubview:mySwitch];
return view;
}

スイッチはオーバーレイに表示されますが、呼び出されたときに何かを実行するにはどうすればよいでしょうか?

私は次のことを試しました

-(void)mySwitch {
  if ([mySwitch.on]){
    execute this..

  }
 }

しかし、上記は機能しません。「宣言されていない識別子です。UISwitch のことですか?」というエラーが表示されます。そのため、mySwitch.on を UISwitch.on に置き換えると、「タイプ UISwitch のオブジェクトにプロパティが見つかりません」と表示されます。

if else メソッドを適切に実行したいだけです。オーバーレイを作成し、スイッチ コードを作成したところ、非常に完璧に表示されます。しかし、今は if/else 条件で何かをしたいと思っています。これを修正するにはどうすればよいですか?

私は何を間違えましたか?

4

2 に答える 2

1

UISwitch を選択してよかったです。私の意見では、はるかに簡単なソリューションです。あなたの問題は何ですか、それはスコーピングに関連しています。オーバーレイの初期化で UISwitch を宣言すると、関数が終了し、UISwitch にアクセスできなくなります。

あなたがする必要があるのは、あなたの.hでそれのためのプロパティを作成することです. これで問題が解決するはずです。

編集:コメントで言及した問題を解決する:

1) あなたの宣言は、

@property (nonatomic, retain) UISwitch *mySwitch;

@synthesize mySwitch;その後、 .m ファイルでa を実行する必要があります。

2) この理由は、いくつかの場所で mySwitch を再宣言しているように見えるため、同じ名前の変数が 2 つあるためです。私はあなたのコードが次のように見えるこれらの場所を推測しています:

UISwitch *mySwitch = //Stuff;

次のようになります。

mySwitch = //Stuff;

その理由は、.h ファイルで既に宣言しているため、単に初期化または操作する必要があるだけです。もう一度宣言すると、関数を終了した後に再び存在しない新しいインスタンスで上書きされます。

3) 合成のために mySwitch = mySwitch を設定する必要はありません。上記のコードを参照してください。また、関数名が変数名と同じでないことを確認してください!

最新情報やその他の質問については、お気軽にコメントしてください。-カロリー

于 2012-07-30T19:51:28.100 に答える
0

mySwitch メソッドで mySwitch にアクセスできません。mySwitch のプロパティを作成し、そのゲッターとセッターを作成します。次に、mySwitch メソッドでアクセスできます。

[..]
@property UISwitch *mySwitch;
[..]
@synthesize mySwitch = mySwitch;

-(void)mySwitch {
  if ([self.mySwitch.on]){
     [..]
  }
}
于 2012-07-30T19:47:18.380 に答える