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

Why isn't the action for my newly created UISwitch being called (Objective-c, Xcode 7.0.1)?

所以我有一个 UIswitch (firstSwitch),当它打开时调用一个动作,它创建另一个 UISwitch (secondSwitch)。然后我想重复这个步骤,新创建的 UISwitch (secondSwitch) 在它打开时调用一个动作,它创建一个新的 UISwitch (thirdSwitch)。但问题是,第一个新创建的开关(secondSwitch)没有检测到 ON 状态,因此它无法创建新的 UISwitch(thirdSwitch)。对此的任何建议或指导将不胜感激。先感谢您。

下面是代码片段以获得更好的想法(请忽略 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 addTarget:self action:@selector(switchIsChanged:) forControlEvents:UIControlEventValueChanged]; 移动到 loadSecondSwitch.

内部

你在secondSwitch创建之前添加target,应该在创建之后添加,最好放在函数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];

希望对你有用。

干杯。