为什么不调用我新创建的UISwitch的操作(Objective-c,Xcode 7.0.1)?



所以我有一个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内部。

最新更新