Использование TTImageView с AQGridView - PullRequest
0 голосов
/ 31 октября 2010

Я создал пользовательский AQGridViewCell.

С помощью UIImageView все работает. Изображение появляется и кликабельно, но когда я изменяю UIImageView на TTImageView, я не могу нажать на изображение.

Тот же пример, что и здесь ниже, просто изменив viewview на UIImageView и установив сообщение на изображение, все работает как положено.

Вот мой 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;
}

Ответы [ 3 ]

1 голос
/ 08 декабря 2010

Я столкнулся с такой же ситуацией, и вот решение, с которым я пришел. Мой 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 загрузил изображение, он вызывает imageView: didLoadImage: метод для делегата (который является PostGridViewCell). В моем файле реализации у меня есть этот метод:

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

Помогает ли это?
Cheers,
Томас.

0 голосов
/ 26 июля 2011

Проблема здесь в том, что в TTImageView userInteractionEnabled установлено в YES.Таким образом, событие касания удерживается TTImageView, и AQGridView ожидает касания в представлениях ячейки.Просто добавьте userInteractionEnabled = NO к TTImageView в вашей ячейке, и вы готовы к работе.

0 голосов
/ 31 октября 2010

Не совсем уверен, что вы подразумеваете под "кликабельным" - как UIButton? Какое поведение вы хотите достичь, когда пользователь нажимает на одно из изображений?

Я не вижу здесь непосредственной проблемы, но могу дать вам информацию, которая может помочь.

Прежде всего, TTImageView и UIImageView оба происходят от UIView, TTImageView не происходит от UIImageView (важно отметить):

UIImageView : UIView
TTImageView : TTView : UIView

Мы не знаем, что происходит за кулисами в UIImageView, поэтому я не вижу, что там происходит, но документация ясно показывает, что стандартное поведение UIImageView для userInteractionEnabled равно NO - что странно, потому что вы говорите, что он работает с UIImageView, а не наоборот.

Вы пытались установить для свойства userInteractionEnabled значение YES в TTImageView?

...