Отправить данные в UIView из UIViewController?
Очень большая путаница, которую я никак не мог разрешить...
Я мог бы запутаться в некоторых основных вещах.. но я просто не могу сделать это прямо
Здесь есть две вещи
- UIViewController
- UIView объект внутри UIViewController
Вот что я сделал:
1) создаем проект единого вида - > из раскадровки я вытащил UIView на UIViewController
2) новый - > файл для создания myUIViewClass.h и myUIViewClass.m, который является подклассом UIView.
3) назначьте "пользовательский класс" UIView, который я вытащил, myUIViewClass
4) вернуться в для UIViewController, контроль+перетащите, что ему UIView в моем myUIViewController.h и сделать его выходом, как это:
MyUIViewController.h
#import <UIKit/UIKit.h>
#import "myUIViewClass.h"
@interface myUIViewController : UIViewController
@property (strong, nonatomic) IBOutlet myUIViewClass *uiview;
@end
4) Создайте свойство внутри myUIViewClass.h, который будет делать некоторые чертежи для UIView напрямую:
MyUIViewClass.h
#import <Foundation/Foundation.h>
@interface myUIViewClass : NSObject
//I want to use this array in - (void)drawRect:(CGRect)rect {} method.
@property (nonatomic, strong) NSArray *arrayInsideUIView;
@end
4) внутри myUIViewClass.m, поскольку это подкласс UIView, есть такая строка кода, которая вызывается при запуске проекта:
MyUIViewClass.m
- (void)drawRect:(CGRect)rect {
NSLog(@"drawing starts");
}
5) Теперь я хочу, чтобы это было что-то вроде:
- (void)drawRect:(CGRect)rect {
NSLog(@"data to draw with: %@", _arrayInsideUIView);
}
6) но прежде чем сделать это, мне нужно будет заполнить _arrayInsideUIView. Я хочу сделать это из myUIViewController.m
7) Как мне это сделать?
Не правильно 1:
MyUIViewController.m
- (void)viewDidLoad {
_uiview = [UIView alloc] init];
_uiview.arrayInsideUIView = @[@"one", @"two"];
//the array is not inside UIView, but inside myUIViewClass
}
Не правильно 2:
MyUIViewController.m
- (void)viewDidLoad {
_uiview = [[myUIViewClass alloc] init];
[self.view addSubview: _uiview];
//this creates duplicate UIView's
}
Не правильно 3:
MyUIViewController.m
- (void)viewDidLoad {
myUIViewClass *uiviewclass = [[myUIViewClass alloc] init];
uiviewclass.arrayInsideUIView = @[@"one", @"two"];
//No UIView gets created here
}
Так запутался!
1 ответ:
Все, что вам нужно сделать, это следующее:
- (void)viewDidLoad { [super viewDidLoad]; //dont forget this self.uiview.arrayInsideUIView = @[@"one", @"two"]; }Поскольку представление подключено к раскадровке, раскадровка обрабатывает создание представления, поэтому нет необходимости выделять/инициализировать его самостоятельно.
И если вы делаете alloc init его самостоятельно (что вы в настоящее время делаете), вы заменяете один раскадровка установки, так что придется полностью настроить его с нуля самостоятельно (положение кадра и т.д.), что, вероятно, не то, что вы хотите.
Comments