所以我有UISwitch
:
UISwitch* statusBarSwitch = [[UISwitch alloc]initWithFrame:CGRectMake(254, 65, 0, 0)];
[statusBarSwitch addTarget:self action:@selector(statusBarSwitchChanged) forControlEvents:UIControlEventValueChanged];
[[self view]addSubview:statusBarSwitch];
[statusBarSwitch setOn:YES animated:NO];
这是UISwitch的方法:
-(void)statusBarSwitchChanged {
if (statusBarSwitch.on) {
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
}else{
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide];
}
}
现在,当我运行它时,我得到错误'使用未声明的标识符'在statusBarSwitchChanged
。
有人请帮助我,我不知道我做错了什么。
答案 0 :(得分:2)
当您尝试编译时发生错误,而不是在您尝试运行时发生错误。
为什么您希望代码按原样运行? statusBarSwitch
方法中没有statusBarSwitchChanged
这样的变量。
在您发布的第一个代码中有一个这样的局部变量,但该变量在声明的花括号之外是不可见的。
您有两种方法可以解决此问题。
第一种是按如下方式更改选择器和方法:
UISwitch* statusBarSwitch = [[UISwitch alloc]initWithFrame:CGRectMake(254, 65, 0, 0)];
// Note the added colon to the selector name
[statusBarSwitch addTarget:self action:@selector(statusBarSwitchChanged:) forControlEvents:UIControlEventValueChanged];
[[self view]addSubview:statusBarSwitch];
[statusBarSwitch setOn:YES animated:NO];
- (void)statusBarSwitchChanged:(UISwitch *)sender {
if (sender.on) {
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
} else {
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide];
}
}
上述更改可确保将使用的开关传递给您设置的操作方法。
第二个选项是创建一个实例变量来保持对UISwitch
的引用。然后,您可以从类中的任何实例方法访问该开关。