2012-01-02 176 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