2011-05-28 47 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