代码之家  ›  专栏  ›  技术社区  ›  rckoenes

自定义UIButton无法与链接的UIImageView交互

  •  3
  • rckoenes  · 技术社区  · 15 年前

    我被以下代码困住了。 我的UIButton扩展类如何不能显示或隐藏UIImageView

    正在调用我的方法,imageview不是nil。

    代码如下:

    @interface UILinkedImageButton : UIButton {
        IBOutlet UIImageView *linkImageView;
    }
    
    @property (nonatomic, retain) IBOutlet UIImageView *linkImageView;
    
    @end
    
    #import "UILinkedImageButton.h"
    
    @interface UILinkedImageButton ()
    - (void)showImage;
    - (void)hideImage;
    @end
    -------------------------------------------------------------------------------------------------
    
    @implementation UILinkedImageButton
    
    
    @synthesize linkImageView;
    
    - (void) dealloc{
    
        [linkImageView release], linkImageView = nil;
        [super dealloc];
    }
    
    - (id) initWithCoder:(NSCoder *)aDecoder
    {
        self = [super initWithCoder:aDecoder];
    
        if(self){
            [self addTarget:self action:@selector(showImage) forControlEvents:UIControlEventTouchDown];
            [self addTarget:self action:@selector(hideImage) forControlEvents:UIControlEventTouchUpInside];
            [self addTarget:self action:@selector(hideImage) forControlEvents:UIControlEventTouchUpOutside];
        }
    
        return self;
    }
    
    - (void)showImage
    {
        if(self.imageView){
            NSLog(@"UILinkImageButton - showImage - currentStatus: %@", self.imageView);
            self.imageView.hidden = NO;
            [self.superview layoutIfNeeded];
        }   
    }
    
    - (void)hideImage
    {
        if(self.imageView){
            NSLog(@"UILinkImageButton - hideImage");
            self.imageView.hidden = YES;
        }
    }
    
    @end
    
    1 回复  |  直到 15 年前
        1
  •  2
  •   Swapnil Luktuke    15 年前

    正如Thomas Mller在评论中提到的,我也认为动作应该在控制器中。

    除此之外,在代码中,您正在更改“imageView”对象的隐藏属性,而您在声明中创建的自定义图像视图是“linkImageView”。 “imageView”是在UIButton中声明的按钮的只读属性 它表示按钮图像视图 不是你的linkImageView .

    希望这有帮助。

    斯瓦普尼尔