图像不隐藏单击栏按钮

时间:2014-04-18 06:33:58

标签: ios objective-c uibutton uibarbuttonitem

我有一个小节按钮,操作如下。在这里我需要先显示一个图像,然后我需要在下一次单击它时隐藏它。

我的问题是我能够显示图像,但我无法隐藏它。有趣的是它正在执行其他部分操作,但仍然没有隐藏图像。请帮助我。

- (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;
       }
}

提前致谢。

3 个答案:

答案 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;
       }
}