2013-04-02 63 views
1

我有一個UISwitch,我將其放置在故事板中,並將其連接到實現文件中的插座,並將valueChanged:方法連接到控件事件「值已更改」。但是,只有當我將它從關閉切換到開啓時纔會調用,而不是從開啓到關閉。UISwitch只能單向工作

這裏是我的代碼:

ViewController.h

@interface splitViewController : UIViewController 
@property (weak, nonatomic) IBOutlet UISwitch *tipIncluded; 

@end 

ViewController.m:

- (IBAction)valueChanged:(UISwitch *)sender { 
    NSLog(@"3"); 
    if (_tipIncluded.isOn==YES){ 
     NSLog(@"2"); 
     _tipIncluded.on=NO; 
     [email protected]""; 
     _tip.backgroundColor = [UIColor whiteColor]; 

    } 
    if (_tipIncluded.isOn==NO){ 
     NSLog(@"1"); 
     _tipIncluded.on=YES; 
     [email protected]"0"; 
     _tip.backgroundColor = [UIColor lightGrayColor]; 
     _tip.textColor = [UIColor blackColor]; 
    } 

} 

我知道,當它從OFF上,因爲它只是調用這個方法當我以這種方式切換時,我只在方法結束時從NSLog獲得3個。

回答

5

決不YES或NO比較東西:

if (_tipIncluded.isOn==YES){ 
if (_tipIncluded.isOn==NO){ 

該代碼是錯誤的。也沒有UISwitch的isOn屬性。

簡化您的代碼。只要說if (_tipIncluded.on)else(或if (!tipIncluded.on))。

另外你在做什麼是堅果。用戶將開關切換到ON,您立即將其切換到OFF ,並立即將其切換到,反之亦然。這將使它無法移動開關!

+0

確實在UISwitch上有一個「isOn」屬性。 該屬性被聲明爲'@property(nonatomic,getter = isOn)BOOL on;' – Lance

+0

確定,但它與說'on'完全相同,不是嗎? – matt

+0

非常真實,只是想我會指出使用'isOn'的代碼不是_wrong_;} – Lance

0

還記得在開關上放一個插座。這對我有效。只要確保首先輸入一個默認值即可。也許吧。

[mySwitchOutlet setOn:YES animated:YES]; 

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

    if ([sender isOn]) 
    { 
     NSLog(@"ON"); 

    }else{ 
     NSLog(@"OFF"); 
    } 

}