Добавление материала в UIView из другого класса - PullRequest
1 голос
/ 24 апреля 2011

Это очень простой вопрос, но я не могу заставить его работать должным образом. У меня есть следующие настройки:

Приложение для iPhone с основным контроллером (ViewController). Я думал, что было бы лучше экспортировать некоторые его части в новые файлы (лучшая структура и т. Д.). Поэтому я создал новый класс "ClassFile". Вот что я хочу сделать:

ViewController.m

// Launch function from other ViewController class
-(void)someWhereAtViewController {
    ClassFile *Classinstance = [[ClassFile alloc] init];
    UILabel *label = [Classinstance createLabel];
    [Classinstance release];
}

ClassFile.m

// Do some stuff
-(UILabel *)createLabel {
    // Create an UILabel "label"
    [...]
    // Now add the label to the main view
    // Like this it clearly doesn't work, but how to do it?
    [self.view addSubview:label]
    // Return the label to the other class 
    return label
}

Большое спасибо за вклад! Насколько я знаю, все в этом фиктивном коде работает, кроме добавления метки к основному виду.

Ответы [ 2 ]

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

Звучит так, будто вы хотите "категорию". Категория - это способ добавления методов к существующим классам, независимо от того, есть ли у вас их исходный код или нет.

Итак, у вас есть:

//ViewController.h
@interface ViewController : UIViewController {

}
@end

//ViewController.m
#import "ViewController.h"
@implementation ViewController
...
@end

Вы хотите другой файл с большим количеством методов для ViewController, правильно? Если так, то вы бы сделали:

//ViewController+Extras.h
#import "ViewController.h"
@interface ViewController (Extras)
- (UILabel *)createLabel;
@end

//ViewController+Extras.m
#import "ViewController+Extras.h"
@implementation ViewController (Extras)
- (UILabel *)createLabel {
  return [[[UILabel alloc] initWithFrame:CGRectMake(0,0,42,42)] autorelease];
}
@end

И тогда вы сможете сделать:

//ViewController.m
#import "ViewController.h"
#import "ViewController+Extras.h"
@implementation ViewController
- (void)doStuff {
  UILabel *newLabel = [self createLabel];
  //do stuff
}
@end

Для получения дополнительной информации о категориях, ознакомьтесь с документацией .

1 голос
/ 24 апреля 2011
-(UILabel *)createLabelInView: (UIView *)view {
    // Create an UILabel "label"
    [...]
    // Now add the label to the main view
    // Like this it clearly doesn't work, but how to do it?
    [view addSubview:label]
    // Return the label to the other class 
    return label
}

и затем вызовите его с помощью:

// Launch function from other ViewController class
-(void)someWhereAtViewController {
    ClassFile *Classinstance = [[ClassFile alloc] init];
    UILabel *label = [Classinstance createLabelInView: self.view];
    [Classinstance release];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...