2009-11-06 120 views
1

所以我創建了一個自定義的TableViewCell,並在筆尖上放了一個UISwitch。在我甚至將它連接到任何東西之前,如果我在模擬器中運行它並單擊它,它將通過動畫等從關閉切換到開啓。單擊UISwitch時關閉自動切換?

我正試圖添加一個功能,只允許用戶在某個條件爲真時從關閉變爲開啓。我希望如此,當用戶觸摸開關時,它會檢查條件是否爲真,如果不是,開關不會移動。

我已經設置了IBAction,如果用戶觸摸內部,它會運行我的功能。我的功能是這樣的:

if([on_switch isOn]) 
    { 
     if([my_switch canSwitchOn]) 
     { 
      NSLog(@"SWITCHED ON SUCCESSFULLY"); 
      [on_switch setOn:TRUE animated:TRUE]; 
     } 
     else 
     { 
      NSLog(@"SWITCHED ON UNSUCCESSFULLY"); 
         //Put in popup here 
     } 
    } 
    else 
    { 
     [[ClassesSingleton sharedSingleton] classSwitchedOff:cell_index]; 
     [on_switch setOn:FALSE animated:TRUE]; 
    } 

但是,無論我做什麼,該交換機將翻轉,即使我給它沒有指示進行操作。我很確定這是自動翻轉,即使在我把任何東西吸引到它之前,它也會這樣做。有沒有辦法關掉它?

謝謝!

回答

3

您需要做的是在您的UISwitch上將userInteractionEnabled屬性設置爲False。

如果你有媒體鏈接發在Interface Builder一個IBOutlet在你所屬的類delared連接,你就可以將其設置在這樣的代碼:

mySwitch.userInteractionEnabled = NO; 

你也可以直接設置屬性在Interface Builder中選擇相應的複選框,如下圖所示(但是在您的應用程序,你將需要多達連線按鈕的IBOutlet反正來實現你的條件邏輯。) alt text http://www.clixtr.com/photo/ef06c1f7-8cca-40cd-a454-5ca534ceb9fe

+0

我試過了。問題是,它在一個TableViewCell上。當我關閉userInteractionEnabled並嘗試點擊開關時,它會觸及它後面的單元格。細胞進入另一種觀點。我需要它仍然算作一個對象,以便單元格不會被觸及,但不會自動切換。 – Ethan 2009-11-06 21:55:21

+1

通過將常規UIView粘貼到具有userInteraction Enabled的按鈕(具有完全相同的大小)下方,您可以使生活變得簡單。然後,當您在按鈕上關閉它時,觸摸將通過開關下落,但被常規視圖佔用,並且永遠不會觸擊TableView Cell – 2009-11-06 22:06:51

+1

另一種選擇是將開關設置爲NO。它會使開關變灰,所以你可以實際上告訴它在點擊它之前不會做任何事情,並且它不會將水龍頭傳遞到它後面的單元格。 – 2009-11-06 23:17:08

1

我想你會需要的東西如下所示:

// Somewhere just after the creation of _switch 
[_switch addTarget:self action:@selector(switchValueDidChange:) forControlEvents:UIControlEventValueChanged]; 

// Target/Action method 
- (void)switchValueDidChange:(UISwitch *)sender { 
    if(sender.on && [self canSwitchOn] == NO){ 
     [sender setOn:NO animated:YES]; 
     // Popup 
    } 
} 

您遇到的問題是交換機已經提交了它的狀態。當情況並非如此(我不確定,從未測試過),您必須檢查開關是否當前爲而不是。當用戶不允許切換開關時,這一位代碼將恢復狀態。

更好的方法是禁用控件,但在這種情況下可能不是你想要的。