2012-01-02 69 views
3

我有一个在.xib文件中定义的UISwitch。我连接的事件是“价值改变”。如何防止UISwitch改变状态?

我想以下行为(主要是警告用户该功能是在软件的全面Vesion提供):

  1. 允许用户点击开关
  2. 防止开关滑动到“在”(我希望交换机留在‘关’的位置)
  3. 显示警报

到目前为止,我不能得到2工作。现在我有一个kludge。我强迫开关回到OFF位置:

[self.switchButton setOn:NO animated:NO]; 

UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:@"Feature unlocked in Full Version" message:nil delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil] autorelease]; 
alert.tag = ALERT_TAG; 
[alert show]; 

的问题是,你看到的将开关滑动到ON位置,然后跳转到OFF位置,然后就看到警告框。

有没有办法拦截行为,使交换机不滑动到ON位置?

UPDATE

我试过了链接到“TouchUpInside”事件并没有动了我的警觉的代码。在交换机状态下截取视觉变化还不够早。

+0

类似'self.switchbutton.enabled = NO'? – 2012-01-02 10:47:51

+0

我其实不想禁用它。如果我这样做,用户将无法触发警报。 – milesmeow 2012-01-02 10:50:20

+0

@milesmeow - 你现在的行为对我来说看起来很好。用户点击,获得警报,然后交换机退出。 – 2012-01-02 10:54:14

回答

1

为关闭在XIB和内部valueChange动作方法

-(IBAction) switchValueChanged{ 
if (toggleSwitch.on) { 
    UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:@"Feature unlocked in Full Version" message:nil delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil] autorelease]; 
    alert.tag = ALERT_TAG; 
    [alert show]; 
} 
} 
+0

这个工作?我遇到了同样的问题,我正在倾听valueChange操作。我将拨动开关设置为OFF,我发现它从ON突然切换回OFF。 – bantic 2012-11-14 17:14:10

+0

@bantic是对的,不起作用 – 2015-06-22 13:58:06

2

一种不复杂的解决方案是只把一个按钮具有相同的大小和透明背景颜色在UISwitch控制的前面设置的UISwitch状态。虽然这不是您的问题的直接答案,但它是很好的解决方法,我始终使用UIImageView这样做。

+0

我也想到了。如果我不能以其他方式工作,那将是一个糟糕的解决方案。 :P。 – milesmeow 2012-01-02 12:53:26

1

尝试聆听TouchDown事件而不是TouchUpInside。

2

为什么不ü只需设置用户交互为NO

[self.switchButton setUserInteractionEnabled:NO]; 
2

添加一个清晰的彩色子视图到UISwitch观点,覆盖它并添加UITapGestureReconizer这个子视图,所有的动作操作都可以在自来水行动,包括改变触发UISwitch视图状态。希望它能帮助你!

5

我有和你一样的问题。在你的valueChanged动作方法中,你必须调用setOn方法,动画设置为true。因此,在迅速,这将是:

@IBAction func switchValueChanged(sender: UISwitch) { 
    sender.setOn(false, animated: true) 
} 

,因为这种方法被调用后开关值改变这似乎有悖常理。但不知怎的,它似乎工作。

+0

这个。还要注意的是,调用sender.setOn(...)将不会触发valueChanged事件,而sender.isOn = false会做。 – 2017-11-01 14:54:47