【问题标题】:Image Not Hiding on clicking Bar button单击栏按钮时图像未隐藏
【发布时间】:2014-06-02 15:29:01
【问题描述】:

我有一个条形按钮,动作如下。在这里,我需要在第一次单击时显示图像,并且在下次单击时需要隐藏它。

我的问题是我可以显示图像但无法隐藏它。有趣的是它执行了动作的其他部分,但仍然没有隐藏图像。请帮帮我。

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

提前致谢。

【问题讨论】:

    标签: ios objective-c uibutton uibarbuttonitem


    【解决方案1】:

    我认为 flag 是一个 BOOL 变量,所以在 viewDidLoad 中设置 flag=NO;并定义 ImageView 变量 UIImageView *shadowView; in to .h file propertysynthesize in .m 类,然后在您的 IBAction Method 设置中,如:-

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

    【讨论】:

      【解决方案2】:

      由于shadowView 是“else”范围内的局部变量,因此您可以访问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。您也可以在其他地方提取图像视图创建代码,并且在操作方法中只处理一件事 - 显示/隐藏。

      【讨论】:

        【解决方案3】:

        shadowView 是一个局部变量。是否可以像当前一样在 ViewDidLoad() 方法中分配 shadowView,如果条件为真,则将分配 imageView。

        @interface MyClass ()
           @property (nonatomic, strong) UIImageView *shadowView;
        @end
        
        - (void)viewDidLoad {
            shadowView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 440)];
        }
        

        希望这会有所帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-08-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-07-02
          • 2016-05-06
          相关资源
          最近更新 更多