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

ここでの問題は、TTImageViewのuserInteractionEnabledがYESになっていることです。したがって、タッチイベントはTTImageViewによって保持されており、AQGridViewはセルビューでのタッチを想定しています。userInteractionEnabled = NOをセルのTTImageViewに追加するだけで、準備が整います。

于 2011-07-26T19:50:47.350 に答える
0

UIButton のように、「クリック可能」とはどういう意味かよくわかりませんか? ユーザーが画像の 1 つをタップしたときに、どのような動作を実現したいですか?

ここでは差し迫った問題はわかりませんが、役立つ情報を提供できます。

まず、TTImageView と UIImageView は両方とも UIView から派生していますが、TTImageView は UIImageView から派生していません (注意することが重要です)。

UIImageView : UIView
TTImageView : TTView : UIView

UIImageViewの舞台裏で何が起こっているのかわからないので、そこで何が違うのかわかりませんが、ドキュメントは、UIImageViewのデフォルトの動作userInteractionEnabledNO- であることを明確にしているようです。 UIImageView で動作していますが、その逆ではありません。

userInteractionEnabledプロパティをYESTTImageViewに設定してみましたか?

于 2010-10-31T13:22:34.023 に答える