2012-07-30 88 views
0

我在覆盖层上设置了一个开关,每次我的应用程序启动相机时都会出现这个开关。开关出现了,这很好。但是如何创建if条件来命令开关在打开或关闭时执行动作?如何在覆盖层上设置UISwitch?

//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条件下做一些事情。我该如何纠正这一点?

我做错了什么?

回答

1

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

你需要做的是在你的.h中为它创建一个属性,然后在你的覆盖初始化中设置它等于你的属性。这应该能解决你的问题。

编辑:通过你的评论中提到的问题状况:

1)我相信你的declartion应该是,

@property (nonatomic, retain) UISwitch *mySwitch; 

之后,你将需要做@synthesize mySwitch;你.m文件

2)原因是因为你有两个相同名称的变量,因为你好像在几个地方重新声明mySwitch。我猜这些地方代码如下:

UISwitch *mySwitch = //Stuff; 

它应该只是看起来像:

mySwitch = //Stuff; 

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

3)你不需要为综合设置mySwitch = mySwitch,参见我的上面的代码。还要确保你的函数名和你的变量名不一样!

随意评论更新和更多的问题。 -Kolyoly

+0

你能查看我对另一位回复者的评论所做的修改吗? – 2012-07-30 21:17:47

+0

@AndrewLaeddis我没有看到编辑,你编辑了你的问题,对吧? – 2012-07-30 21:28:40

+0

我认为它正在筛选。无论如何,这是问题所在。 – 2012-07-30 21:54:47

0

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

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

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

编辑包含我所经历的问题,遵循您所说的话! – 2012-07-30 21:17:07