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