【问题标题】:How to set UISwitch on overlay?如何在叠加层上设置 UISwitch?
【发布时间】:2012-07-30 19:24:35
【问题描述】:

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

我做错了什么?

【问题讨论】:

    标签: ios uiswitch


    【解决方案1】:

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

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

    编辑:查看您在评论中提到的问题:

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

    @property (nonatomic, retain) UISwitch *mySwitch;
    

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

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

    UISwitch *mySwitch = //Stuff;
    

    它应该看起来像:

    mySwitch = //Stuff;
    

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

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

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

    【讨论】:

    • 你能检查一下我对其他回答者的评论所做的编辑吗?
    • @AndrewLaeddis 我没有看到编辑,你编辑了你的问题,对吧?
    • 我想它正在被筛选。无论如何,这就是问题所在。
    • 1) 放置@property UISwitch *mySwitch;给了我警告“未指定属性,假定分配”和“默认属性分配不适合非 gc 对象”。
    • 2) 之后在我的 .m 中使用 mySwitch 的所有地方我都会收到黄色警告“mySwitch 的本地声明隐藏实例变量”。 3)当我实现@synthesize mySwitch = mySwitch;和 -(void)mySwitch 及其下的方法,我得到“可写原子属性'mySwitch'不能将合成的setter与用户定义的getter配对。&“在'mySwitch'的实现中返回类型冲突:'UISwith *' vs '无效'
    【解决方案2】:

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

    [..]
    @property UISwitch *mySwitch;
    [..]
    @synthesize mySwitch = mySwitch;
    
    -(void)mySwitch {
      if ([self.mySwitch.on]){
         [..]
      }
    }
    

    【讨论】:

    • 编辑包含了我按照你所说的遇到的问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多