为什么我新创建的 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];
。
希望对你有用。
干杯。
所以我有一个 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];
。
希望对你有用。
干杯。