我有一个小节按钮,操作如下。在这里我需要先显示一个图像,然后我需要在下一次单击它时隐藏它。
我的问题是我能够显示图像,但我无法隐藏它。有趣的是它正在执行其他部分操作,但仍然没有隐藏图像。请帮助我。
- (IBAction)alerthelp:(id)sender {
UIImageView *shadowView;
if (!flag)
{
shadowView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 440)];
shadowView.image = [UIImage imageNamed:@"helphome.png"];
shadowView.opaque = YES;
shadowView.alpha = 0.8;
shadowView.backgroundColor = [UIColor lightGrayColor];
[self.view addSubview:shadowView];
flag=YES;
}
else
{
shadowView.hidden=YES;
flag=NO;
}
}
提前致谢。
答案 0 :(得分:0)
shadowView
是一个Local变量。如果条件为true,您是否可以在ViewDidLoad()方法中将shadowView分配为当前,将分配imageView。
@interface MyClass ()
@property (nonatomic, strong) UIImageView *shadowView;
@end
- (void)viewDidLoad {
shadowView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 440)];
}
希望这有帮助。
答案 1 :(得分:0)
由于shadowView
是'其他'中的局部变量。您访问nil
值的范围。
要访问您实际添加为子视图的shadowView
,您应该将其声明为和ivar或属性,并保留对它的强引用。
实施例
@interface MyClass ()
@property (nonatomic, strong) UIImageView *shadowView;
@end
...
- (IBAction)alerthelp:(id)sender {
if (!flag && !self.shadowView.hidden)
{
if(!self.shadowView) {
self.shadowView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 440)];
self.shadowView.image = [UIImage imageNamed:@"helphome.png"];
self.shadowView.opaque = YES;
self.shadowView.alpha = 0.8;
self.shadowView.backgroundColor = [UIColor lightGrayColor];
[self.view addSubview:self.shadowView];
}
self.shadowView.hidden = NO;
flag = YES;
}
else
{
self.shadowView.hidden = YES;
flag = NO;
}
}
事实上,你现在不需要flag
ivar。您也可以在其他地方提取图像视图创建代码,并且在操作方法中只处理一件事 - 显示/隐藏。
答案 2 :(得分:0)
我认为flag是BOOL变量,所以在viewDidLoad
set flag=NO
;并定义ImageView变量UIImageView *shadowView;
到.h文件属性和在.m 类中合成,然后在你的IBAction方法集中定义如下: -
- (IBAction)alerthelp:(id)sender {
if (!flag)
{
shadowView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 440)];
shadowView.image = [UIImage imageNamed:@"helphome.png"];
shadowView.opaque = YES;
shadowView.alpha = 0.8;
shadowView.backgroundColor = [UIColor lightGrayColor];
[self.view addSubview:shadowView];
flag=YES;
}
else
{
shadowView.hidden=YES;
flag=NO;
}
}