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 吗?”。然后我用 UISwitch.on 替换 mySwitch.on,然后它说“在 UISwitch 类型的对象上找不到属性”。

我只想正确执行我的 if else 方法。我做了覆盖,我做了开关代码,它看起来非常完美。但现在我希望它在 if/else 条件下做一些事情。我该如何纠正这个问题?

我做错什么了?

4

2 回答 2

1

很高兴您决定使用 UISwitch,在我看来,它是一个更直接的解决方案。至于您的问题是什么,它与范围界定有关。您在覆盖初始化中声明您的 UISwitch,然后函数结束,您将失去访问 UISwitch 的能力。

您需要做的是在您的 .h 中为它创建一个属性,然后将其设置为等于覆盖初始化内的属性。那应该可以解决您的问题。

编辑:通过您在评论中提到的问题:

1)我相信你的声明应该是,

@property (nonatomic, retain) UISwitch *mySwitch;

之后,您需要@synthesize mySwitch;在 .m 文件中执行

2) 这样做的原因是因为您有 2 个同名变量,因为您似乎在几个地方重新声明了 mySwitch。我猜这些地方你的代码看起来像:

UISwitch *mySwitch = //Stuff;

它应该看起来像:

mySwitch = //Stuff;

原因是您已经在 .h 文件中声明了它,您只需要初始化或操作它。如果您再次声明它,您将用一个新实例覆盖它,该实例在您退出函数后将再次不存在。

3)您不需要设置 mySwitch = mySwitch 进行合成,请参见我上面的代码。还要确保您的函数名称与变量名称不同!

随时评论更新和更多问题。-卡罗利

于 2012-07-30T19:51:28.100 回答
0

在您的 mySwitch 方法中无法访问 mySwitch。为 mySwitch 创建一个属性并创建它的 getter 和 setter。然后你可以在你的 mySwitch 方法中访问它。

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

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