UISwitch 始终 returns "False" 值,即使在 Switch 打开时也是如此
UISwitch always returns "False" value even when Switch is on
每次我在模拟器中打开或关闭 UISwitch 时,即使其中一个开关打开,它仍然 returns 错误。我什至尝试添加
self.switch1.on = true;
在 checkSwitch1Changed 的 if 语句中。
这是我在 .m 文件中的代码。
- (IBAction)checkSwitch1Changed:(id)sender {
if (self.switch1.on)
{
self.switch2.on = NO;
self.switch3.on = NO;
self.switch4.on = NO;
}
...
}
- (IBAction)checkSwitch2Changed:(id)sender {
if (self.switch2.on)
{
self.switch1.on = NO;
self.switch3.on = NO;
self.switch4.on = NO;
}
...
}
- (IBAction)checkSwitch3Changed:(id)sender {
if (self.switch3.on)
{
self.switch1.on = NO;
self.switch2.on = NO;
self.switch4.on = NO;
}
...
}
- (IBAction)checkSwitch4Changed:(id)sender {
if (self.switch4.on)
{
self.switch1.on = NO;
self.switch2.on = NO;
self.switch3.on = NO;
}
...
}
这是我在 .h 中的代码
@property (weak, nonatomic) IBOutlet UISwitch *switch1;
@property (weak, nonatomic) IBOutlet UISwitch *switch2;
- (IBAction)checkSwitch1Changed:(id)sender;
- (IBAction)checkSwitch2Changed:(id)sender;
//********
@property (weak, nonatomic) IBOutlet UISwitch *switch3;
@property (weak, nonatomic) IBOutlet UISwitch *switch4;
- (IBAction)checkSwitch3Changed:(id)sender;
- (IBAction)checkSwitch4Changed:(id)sender;
如果我使用该视图控制器发送数据,这实际上有效并发回 true。但我试图从另一个视图控制器访问此数据,它发回 false。我使用这段代码从另一个视图控制器访问数据。
//import data from SetupController'
SetupController *setupController = [[SetupController alloc] initWithNibName:@"SetupController" bundle:nil];
...
Firebase *postRef = [savedRef childByAppendingPath: @"Switches"];
NSDictionary *post1 = @{
@"Check1": @(setupController.self.switch1.on),
您还需要 'set' 将开关打开,而不是 监听 以查看它是否打开(无需先设置,如果有意义的话)。
我敢肯定有更优雅的方法来做到这一点(这里有点冗长),但你应该明白这个想法,如果你挂钩 ALL[=27,这个方法应该会起作用=] 切换到 one IBAction
并将方法上的 sender
从 id
更改为 UISwitch
.
(当然你不需要只使用 one IBAction,尽管这样做更有意义,而不是全部使用 4 个动作想做同样的事情)
- (IBAction)switchPressed:(UISwitch *)sender {
if (sender==self.switch1) {
self.switch1.on = YES;
self.switch2.on = NO;
self.switch3.on = NO;
self.switch4.on = NO;
}
if (sender==self.switch2) {
self.switch1.on = NO;
self.switch2.on = YES;
self.switch3.on = NO;
self.switch4.on = NO;
}
if (sender==self.switch3) {
self.switch1.on = NO;
self.switch2.on = NO;
self.switch3.on = YES;
self.switch4.on = NO;
}
if (sender==self.switch4) {
self.switch1.on = NO;
self.switch2.on = NO;
self.switch3.on = NO;
self.switch4.on = YES;
}
}
您是否尝试检查 isOn
属性,而不是 on
?
if (self.switch1.on)
变成
if (self.switch1.isOn)
还要检查与开关关联的 IBAction 是否是
ValueChanged
事件,参考网点已正确链接。
每次我在模拟器中打开或关闭 UISwitch 时,即使其中一个开关打开,它仍然 returns 错误。我什至尝试添加
self.switch1.on = true;
在 checkSwitch1Changed 的 if 语句中。
这是我在 .m 文件中的代码。
- (IBAction)checkSwitch1Changed:(id)sender {
if (self.switch1.on)
{
self.switch2.on = NO;
self.switch3.on = NO;
self.switch4.on = NO;
}
...
}
- (IBAction)checkSwitch2Changed:(id)sender {
if (self.switch2.on)
{
self.switch1.on = NO;
self.switch3.on = NO;
self.switch4.on = NO;
}
...
}
- (IBAction)checkSwitch3Changed:(id)sender {
if (self.switch3.on)
{
self.switch1.on = NO;
self.switch2.on = NO;
self.switch4.on = NO;
}
...
}
- (IBAction)checkSwitch4Changed:(id)sender {
if (self.switch4.on)
{
self.switch1.on = NO;
self.switch2.on = NO;
self.switch3.on = NO;
}
...
}
这是我在 .h 中的代码
@property (weak, nonatomic) IBOutlet UISwitch *switch1;
@property (weak, nonatomic) IBOutlet UISwitch *switch2;
- (IBAction)checkSwitch1Changed:(id)sender;
- (IBAction)checkSwitch2Changed:(id)sender;
//********
@property (weak, nonatomic) IBOutlet UISwitch *switch3;
@property (weak, nonatomic) IBOutlet UISwitch *switch4;
- (IBAction)checkSwitch3Changed:(id)sender;
- (IBAction)checkSwitch4Changed:(id)sender;
如果我使用该视图控制器发送数据,这实际上有效并发回 true。但我试图从另一个视图控制器访问此数据,它发回 false。我使用这段代码从另一个视图控制器访问数据。
//import data from SetupController'
SetupController *setupController = [[SetupController alloc] initWithNibName:@"SetupController" bundle:nil];
...
Firebase *postRef = [savedRef childByAppendingPath: @"Switches"];
NSDictionary *post1 = @{
@"Check1": @(setupController.self.switch1.on),
您还需要 'set' 将开关打开,而不是 监听 以查看它是否打开(无需先设置,如果有意义的话)。
我敢肯定有更优雅的方法来做到这一点(这里有点冗长),但你应该明白这个想法,如果你挂钩 ALL[=27,这个方法应该会起作用=] 切换到 one IBAction
并将方法上的 sender
从 id
更改为 UISwitch
.
(当然你不需要只使用 one IBAction,尽管这样做更有意义,而不是全部使用 4 个动作想做同样的事情)
- (IBAction)switchPressed:(UISwitch *)sender {
if (sender==self.switch1) {
self.switch1.on = YES;
self.switch2.on = NO;
self.switch3.on = NO;
self.switch4.on = NO;
}
if (sender==self.switch2) {
self.switch1.on = NO;
self.switch2.on = YES;
self.switch3.on = NO;
self.switch4.on = NO;
}
if (sender==self.switch3) {
self.switch1.on = NO;
self.switch2.on = NO;
self.switch3.on = YES;
self.switch4.on = NO;
}
if (sender==self.switch4) {
self.switch1.on = NO;
self.switch2.on = NO;
self.switch3.on = NO;
self.switch4.on = YES;
}
}
您是否尝试检查 isOn
属性,而不是 on
?
if (self.switch1.on)
变成
if (self.switch1.isOn)
还要检查与开关关联的 IBAction 是否是
ValueChanged
事件,参考网点已正确链接。