цель c подклассом UIImageView - PullRequest
       24

цель c подклассом UIImageView

1 голос
/ 04 апреля 2011

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

//Imager.h
#import <UIKit/UIKit.h>
@interface Imager : UIImageView {

}

-(id) init;
-(void) retrieveImageFromUrl: (NSString *)the_URL;

@end

//Imager.m
#import "Imager.h"
@implementation Imager
@synthesize image;


-(id)init
{
    self = [super init];
    return self;
}

-(void) retrieveImageFromUrl: (NSString *)the_URL{

     //Not implemented yet
}
@end

Итак, я использую этот параметр: cell.postImage.image = [UIImage imageNamed:@"img.png"];
До того, как это будет выполнено, у меня также есть postImage = [[UIImageView alloc] init];

Если postImage объявлен как UIImageView, все работает как положено.Но если я вместо этого изменю его на Imager, то ничего не отобразится.Чего мне не хватает?

Ответы [ 2 ]

4 голосов
/ 04 апреля 2011

Вы синтезируете image, таким образом блокируя вызовы к setImage в суперклассе (то есть UIImageView), когда вы пытаетесь использовать точечную нотацию для установки изображения.

Удалите эту строку:

@synthesize image;
3 голосов
/ 04 апреля 2011

Я бы предложил использовать «категорию» Objective-C вместо создания подкласса UIImageView. Пока вам не нужно добавлять какие-либо переменные-члены, Категория является лучшим решением. Когда вы используете категорию, вы можете вызывать свои расширенные функции в любом экземпляре исходного класса (в вашем случае UIImageView. Это избавляет вас от необходимости сознательно использовать ваш подкласс везде, где вы, возможно, захотите использовать свои новые функции.

Вы можете просто сделать следующее в шапке:

@interface UIImageView (UIImageView+URL)

-(void) retrieveImageFromUrl: (NSString *)the_URL;

@end

Затем в файле импликации:

@implimentation UIImageView (UIImageView+URL)    

-(void) retrieveImageFromUrl: (NSString *)the_URL
{
    // implimentation
}

@end

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

...