所以我有一个UIswitch(firstSwitch),当它打开时,它会调用一个操作,在那里它会创建另一个UIswitch(secondSwitch)。然后我想重复这个步骤,新创建的UISwitch(secondSwitch)调用一个操作,当它处于ON状态时,它会创建一个新的UISwitch。如有任何建议或指导,我们将不胜感激。提前谢谢。
以下是获得更好想法的代码片段(请忽略x、y、宽度和高度的定位):
- (void)viewDidLoad {
[super viewDidLoad];
[self loadFirstSwitch];
[firstSwitch addTarget:self action:@selector(switchIsChanged:) forControlEvents:UIControlEventValueChanged];
//This secondSwitch does not detect the change in state to ON
[secondSwitch addTarget:self action:@selector(switchIsChanged:) forControlEvents:UIControlEventValueChanged];
}
- (void)loadFirstSwitch {
firstSwitch = [[UISwitch alloc] initWithFrame:CGRectMake(screenWidth - 50 - buttonPadding, 527.5 + buttonWidth, 50, 27)];
[scrollView addSubview:firstSwitch];
}
- (void)loadSecondSwitch{
secondSwitch = [[UISwitch alloc] initWithFrame:CGRectMake(screenWidth - 50 - buttonPadding, 527.5 + buttonWidth, 50, 27)];
[scrollView addSubview:secondSwitch];
}
- (void)loadThirdSwitch{
thirdSwitch = [[UISwitch alloc] initWithFrame:CGRectMake(screenWidth - 50 - buttonPadding, 527.5 + buttonWidth, 50, 27)];
[scrollView addSubview:thirdSwitch];
}
- (void) switchIsChanged:(UISwitch *)paramSender{
if(paramSender == firstSwitch){
if([paramSender isOn]){
[self loadSecondSwitch];
}else{
NSLog(@"Switch is off");
}
}
if(paramSender == secondSwitch){
if([paramSender isOn]){
[self loadThirdSwitch];
}else{
NSLog(@"Switch is off");
}
}
}
您在secondSwitch创建之前将目标添加到它,应该在创建之后完成,最好放在函数loadSecondSwitch
中,这样您的代码看起来像
- (void)loadSecondSwitch{
secondSwitch = [[UISwitch alloc] initWithFrame:CGRectMake(screenWidth - 50 - buttonPadding, 527.5 + buttonWidth, 50, 27)];
[scrollView addSubview:secondSwitch];
[secondSwitch addTarget:self action:@selector(switchIsChanged:) forControlEvents:UIControlEventValueChanged];
}
从viewDidLoad
中删除[secondSwitch addTarget:self action:@selector(switchIsChanged:) forControlEvents:UIControlEventValueChanged];
。
我希望它对你有用。
干杯。
在第二个开关实例化之前,您要向它添加一个目标和选择器。尝试将[secondSwitch addTarget:self action:@selector(switchIsChanged:) forControlEvents:UIControlEventValueChanged];
移动到loadSecondSwitch
内部。