Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кастомный компонент, Совмещение нескольких компонетов 
:(
    Опции темы
DenisTv
Дата 4.9.2011, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 3.11.2005

Репутация: нет
Всего: нет



Доброго времени суток!
Во время разработки на objective-c возникла проблема с кастомизацией компоненты.
К примеру: требуется совместить UIImageView и UILabel, для отображения текста на картинке. 
Я решаю созданием своего класса объявление которого выглядит так:
Код

@interface sticker_class : UIImageView{
UILabel *base_label;

}
@property(retain, nonatomic) UILabel *base_label;
-(id)initWithText:(NSString *) theText;
-(CGRect)getRect;
....
@end


а код инициализации так:

Код

-(id) initWithText:(NSString *)theText{
CGRect frameI = CGRectMake(...);
CGRect frameL = CGRectMake(...);
UIImage *img = [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"pic_01" ofType:@"png"]];
self = [[UIImageView alloc] initWithFrame:frameI];
[self setImage:img];
base_label = [[UILabel alloc] initWithFrame:frameL];
base_label.text = theText;
base_label.backgroundColor = [UIColor clearColor];
[self addSubview:base_label];
return self;


Однако при добавлении дополнительных методов(пользовательских\своих\getRect) возникает проблема с вызовом. Ругается на неправильную ссылку в памяти. Я подозреваю, что это из-за моего идеологически неправильного подхода к созданию этого класса  smile  

В чем может быть проблема?
Кто как решал подобную задачу?
PM MAIL ICQ   Вверх
DenisTv
Дата 4.9.2011, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 3.11.2005

Репутация: нет
Всего: нет



А проблема была в неправильном типе родителя) Сложные типы надо наследовать от NSObject и возвращать self при инициализации.
PM MAIL ICQ   Вверх
Bitter
Дата 4.9.2011, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 10
Всего: 27



Цитата

 Сложные типы надо наследовать от NSObject

Чушь! Простите. Вы просто неправильно вызываете инициализацию. В ините Вы должны вызвать Init родителя: 

Код

-(id) initWithText:(NSString *)theText{
 CGRect frameI = CGRectMake(...);
 self = [super initWithFrame:frameI]; ///// Это важно !
 if (self) {
  CGRect frameL = CGRectMake(...);
  UIImage *img = [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"pic_01" ofType:@"png"]];
  [self setImage:img];
  base_label = [[UILabel alloc] initWithFrame:frameL];
  base_label.text = theText;
  base_label.backgroundColor = [UIColor clearColor];
  [self addSubview:base_label];
 }
 return self;

PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | iOS | Следующая тема »


 




[ Время генерации скрипта: 0.0624 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.