2010-10-31 1 views
0

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

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

В том же примере, как здесь, просто изменив изображение на 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; 
} 

ответ

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 делегата для себя (так что я могу быть извещен, когда изображение загружается):

- (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,
Thomas.

+0

Я практически сдался, да, это была бы фантастическая идея. Попробуем это –

0

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

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

передовое, TTImageView и UIImageView и спускаются с UIView, TTImageView не сходит с UIImageView (важно отметить):

UIImageView : UIView 
TTImageView : TTView : UIView 

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

Вы пытались установить userInteractionEnabled на YES на TTImageView?

+0

Спасибо за ваш ответ. AQGridView имеет такой метод, как TableView, где, если вы нажмете на «элемент», вы получите уведомление. Я не получаю это уведомление от AQGridView Delegate. Я попробовал как отменить firstrepsonder, так и установить для userinteraction значение YES. –

+0

Возможно, лучше увидеть код в AQGridView, затем, когда генерируется уведомление ... это может быть полезно. – makdad

+0

Код находится на github. https://github.com/AlanQuatermain/AQGridView –

0

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

Смежные вопросы