0

我创建了一个自定义 AQGridViewCell。

通过使用 UIImageView 一切正常。该图像出现并且是可点击的,但是当我将 UIImageView 更改为 TTImageView 时,我无法点击该图像。

与下面的示例相同,只需将 imageview 更改为 UIImageView 并将 setter 消息更改为图像,一切都按预期工作。

这是我的 ImageGridCell.h

#import "AQGridViewCell.h"
#import <Three20/Three20.h>

@interface ImageGridCell : AQGridViewCell
{
    TTImageView * _imageView;
 NSString *urlPath;
}
@property (nonatomic, retain) NSString *urlPath;

@end

这是我的 ImageGridCell.m

#import "ImageGridCell.h"

@implementation ImageGridCell
@synthesize urlPath;

- (id) initWithFrame: (CGRect) frame reuseIdentifier: (NSString *) aReuseIdentifier
{
    self = [super initWithFrame: frame reuseIdentifier: aReuseIdentifier];
    if ( self == nil )
        return ( nil );

    _imageView = [[TTImageView alloc] initWithFrame: CGRectMake(0, 0, 100, 100)];
 [_imageView setContentMode:UIViewContentModeScaleAspectFit];
    [self.contentView addSubview: _imageView];
    return ( self );
}

- (void) dealloc
{
    [_imageView release];
    [super dealloc];
}

- (CALayer *) glowSelectionLayer
{
    return ( _imageView.layer );
}

- (UIImage *) image
{
    return ( _imageView.image );
}
-(void)setUrlPath:(NSString *)urlpath {
 _imageView.urlPath = urlpath;
}
4

3 回答 3

1

我遇到了同样的情况,这是我带来的解决方案。我的 AQGridViewCell 有一个 TTImageView 和一个 UIImageView。我使用 TTImageView 加载图像,当它被加载时,我将它传递给显示它的 UIImageView。

为此,我的 AQGridViewCell 子类实现了 TTImageViewDelegate 协议。在我的 PostGridViewCell.h 中,我有:

@interface PostGridViewCell : AQGridViewCell <TTImageViewDelegate> {
    @private
    TTImageView *ttImageView_;
    UIImageView *imageView_;
}
// @property here …
@end

在我的实现文件中,在 initWithFrame:reuseIdentifier: 方法中,我初始化了我的 ttImageView 和我的 imageView,但我只将 imageView 添加为我的单元格的子视图。我将 ttImageView 委托属性设置为 self (这样我可以在加载图像时收到通知):

- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)aReuseIdentifier {
    if ((self = [super initWithFrame:frame reuseIdentifier:aReuseIdentifier])) {
        // init image
        ttImageView_ = [[TTImageView alloc] initWithFrame:CGRectZero];
        ttImageView_.delegate = self;
        imageView_ = [[UIImageView alloc] initWithFrame:CGRectZero];
        [self.contentView addSubview:imageView_];
        // …
    }
    return self;
}

当 TTImaveView 加载图像时,它会调用委托(即 PostGridViewCell)上的 imageView:didLoadImage: 方法。在我的实现文件中,我有这个方法:

- (void)imageView:(TTImageView*)imageView didLoadImage:(UIImage*)image {
    self.imageView.image = image;
    [self setNeedsLayout];
}

它有帮助吗?
干杯,
托马斯。

于 2010-12-08T11:39:08.180 回答
0

不太清楚你所说的“可点击”是什么意思——比如 UIButton?当用户点击其中一张图片时,您希望完成什么行为?

我在这里看不到直接的问题,但我可以为您提供可能有帮助的信息。

首先,TTImageView 和 UIImageView 都是 UIView 的后代,TTImageView 不是 UIImageView 的后代(需要注意):

UIImageView : UIView
TTImageView : TTView : UIView

我们不知道 UIImageView 的幕后发生了什么,所以我看不出那里有什么不同,但文档似乎清楚地表明 UIImageView 的默认行为userInteractionEnabledNO- 这很奇怪,因为你说的是它与 UIImageView 一起工作,而不是相反。

您是否尝试将userInteractionEnabled属性设置为YESTTImageView?

于 2010-10-31T13:22:34.023 回答
0

这里的问题是 TTImageView 的 userInteractionEnabled 为 YES。所以触摸事件由 TTImageView 持有,并且 AQGridView 期望在单元格视图中进行触摸。只需将 userInteractionEnabled=NO 添加到单元格中的 TTImageView 即可。

于 2011-07-26T19:50:47.350 回答