2011-05-28 82 views
16

我想檢測時UISwitch /關閉它如何檢測UISwitch是否開啓/關閉?

// .h 
IBOutlet UISwitch *privateSwitch; 
@property (nonatomic, retain) IBOutlet UISwitch *privateSwitch; 

//.m 
@synthesize privateSwitch; 
privateSwitch = [[UISwitch alloc] init]; 
howToDisplay = @"no"; 

// In my cellForRowsAtIndexPath 
UISwitch *privateSwitch = [[UISwitch alloc] initWithFrame:CGRectMake(199, 8, 0, 0)]; 
[privateSwitch addTarget:self action:@selector(switchToggled:) forControlEvents: UIControlEventTouchUpInside]; 
[cell.contentView addSubview:privateSwitch]; 

if ([howToDisplay isEqualToString:@"no"]) { 
    [privateSwitch setOn:NO animated:NO]; 
} else { 
    [privateSwitch setOn:YES animated:NO]; 
} 

- (void) switchToggled:(id)sender { 

if ([privateSwitch isOn]) { 
NSLog(@"its on!"); 
howToDisplay = @"yes"; 
[formDataTwo removeAllObjects]; 
[formTableView reloadData]; 
[privateSwitch setOn:YES animated:YES]; 
} else { 
NSLog(@"its off!"); 
howToDisplay = @"no"; 
[formDataTwo removeAllObjects]; 
[formDataTwo addObject:@"Facebook"]; 
[formDataTwo addObject:@"Twitter"]; 
[formDataTwo addObject:@"Flickr"]; 
[formDataTwo addObject:@"Tumblr"]; 
[formDataTwo addObject:@"Email"]; 
[formDataTwo addObject:@"MMS"]; 

[formTableView reloadData]; 
[privateSwitch setOn:NO animated:YES]; 
} 

}

然而,當我打開它,它會說,它的關閉。是什麼賦予了?

謝謝。

回答

52

在你的cellForRowsAtIndexPath方法中,你正在聲明一個隱藏你的實例變量privateSwitch的本地變量UISwitch *privateSwitch

在您的switchToggled:操作中,您正在使用實例變量來測試交換機的狀態,而不是在cellForRowAtIndexPath中聲明的那個。您可以使用sender參數是這樣的:

- (void) switchToggled:(id)sender { 
    UISwitch *mySwitch = (UISwitch *)sender; 
    if ([mySwitch isOn]) { 
     NSLog(@"its on!"); 
    } else { 
     NSLog(@"its off!"); 
    } 
} 

P.S:我會用UIControlEventValueChanged代替UIControlEventTouchUpInside

+0

謝謝。愚蠢的錯誤!刪除了'UISwitch *',它像一個魅力。 – iosfreak 2011-05-28 18:05:55

+0

歡迎您:) – albertamg 2011-05-28 18:10:34