2011-04-11 64 views
1

我已經讀過所有關於UISwitches,但我似乎無法弄清楚我的情況。 我有2個UISwitch。爲了讓我的代碼工作,只有其中的一個可以打開。我怎麼做到這一點?iPhone UISwitch反應與另一個UISwitch

到目前爲止,我已經試過......

MyClass.h

-(IBAction)sufSwitchChanged:(id)sender; 

MyClass.m

-(IBAction)preSwitchChanged:(id)sender { 
UISwitch *whichSwitch = (UISwitch *)sender; 
BOOL setting = whichSwitch.isOn; 
[newsPre setOn:setting animated:YES]; 
[techPre setOn:setting animated:YES]; 
} 

....這工作,但它使兩個開關都打開或關閉。我只需要弄清楚如何防止它們同時處於開啓狀態。

回答

0

注意你是如何兩個開關設置在這裏的值相同:

[newsPre setOn:setting animated:YES]; 
[techPre setOn:setting animated:YES]; 

您要檢查哪一個是發送者,然後設置其他一到setting相反。爲此,您需要在每臺交換機上設置一個標籤,或者將其設爲子類。有關檢測哪個開關的更多信息,請參見this post,它有一些很好的信息。

3

註冊兩個UISwitch觀察UIControlEventValueChanged針對其他交換機的通知。例如:

- (void)viewDidLoad { // or whatever method is appropriate 
    UISwitch *a = <# initialize a #>; 
    UISwitch *b = <# initialize b #>; 

    [a addTarget:self action:@selector(toggleB:) 
     forControlEvents:UIControlEventValueChanged]; 

    [b addTarget:self action:@selector(toggleA:) 
     forControlEvents:UIControlEventValueChanged]; 
} 

- (IBAction)toggleA:(id)sender { 
    [b setOn:NO animated:YES]; 
} 

- (IBAction)toggleB:(id)sender { 
    [a setOn:NO animated:YES]; 
} 

您還可以在Interface Builder中設置此關係。

+0

這看起來像一個堅實的答案。 +1 – Moshe 2011-04-11 03:23:00

+0

對於真正的問題,即使在建立關係時(他正在讀一本書,和我一樣,它是在IB生成器中完成的),這也不能解決真正的問題。你對如何設置這些關係以及如何傾聽事件給出了很好的評論。但不是核心問題。 – JeroenEijkhof 2011-05-09 21:53:20

+0

你是對的;我在最初的回覆中修改了代碼。 – 2011-05-11 16:37:07