【问题标题】:iOS UISwitch Action called twiceiOS UISwitch Action 调用了两次
【发布时间】:2017-02-20 12:29:35
【问题描述】:

我的应用中有 UISwitch IBAction,即:

- (IBAction)nearMeSwitchAction:(UISwitch *)sender {

        if(nearMeSwitch.isOn)
            [self getLocation];

        [self myMethod];
}

- (void) getLocation
{
  my code...
 [nearMeSwitch setOn:NO animated:YES];
}

在我的getLocation 方法中,我使用了[nearMeSwitch setOn:NO animated:YES],当我点击我的开关时它再次调用nearMeSwitchAction。因此myMethod 被调用了两次。我不想要那个。当我从getLocation 关闭我的开关时,我不想执行nearMeSwitchAction。有没有其他方法可以做到这一点?

【问题讨论】:

  • 显示你的getLocation
  • 调用你的方法 [self myMethod];在其他情况下。因为在这两种情况下关闭/打开你的方法都会被调用。
  • 更新了我的问题。
  • 你必须在 nearMeSwitchAction 方法中执行你想要的,因为在这两种情况下这个方法都会被调用。所以把所有你想在 switch 打开时执行的代码放在 nearMeSwitchAction: 的 If 语句中:在 else 的情况下直接返回。
  • 我想在关闭/打开两种情况下都调用我的方法,只是不想在 getLocation 触发它时调用它

标签: ios uiswitch


【解决方案1】:

当您更改 UISwitch 值时,您无法阻止 nearMeSwitchAction 被调用,但您可以阻止 myMethod 被调用。创建一个Bool 属性,如isFromGetLocation,如果是true,则不要调用该方法。

- (IBAction)nearMeSwitchAction:(UISwitch *)sender {

        if(nearMeSwitch.isOn)
            [self getLocation];
        if(isFromGetLocation)
           //For next time
           isFromGetLocation = NO;
        else
            [self myMethod];
}

- (void) getLocation
{
    //my code...
    isFromGetLocation = YES;
    [nearMeSwitch setOn:NO animated:YES];
} 

【讨论】:

  • 这行得通!我也尝试过 BOOL 但没有用。我想我错过了if(isFromGetLocation) //For next time isFromGetLocation = NO; 今天显然不是我的日子。谢谢!!
  • @thewarri0r9 欢迎朋友 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-30
  • 1970-01-01
  • 2017-06-25
  • 2013-01-21
相关资源
最近更新 更多