如何在叠加层上设置UISwitch?

时间:2012-07-30 19:24:36

标签: ios uiswitch

我在我的叠加层上设置了一个开关,每次我的应用启动相机时都会出现。出现开关,没问题。但是如何创建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条件做一些事情。我该如何纠正这个问题?

我做错了什么?

2 个答案:

答案 0 :(得分:1)

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

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

编辑:解决您在评论中提到的问题:

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

@property (nonatomic, retain) UISwitch *mySwitch;

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

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

UISwitch *mySwitch = //Stuff;

它应该看起来像:

mySwitch = //Stuff;

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

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

随时评论更新和更多问题。 -Karoly

答案 1 :(得分:0)

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

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

-(void)mySwitch {
  if ([self.mySwitch.on]){
     [..]
  }
}