从 UIViewController 向 UIView 发送数据?

Send data TO UIView FROM UIViewController?

非常大的困惑我无法解决...

我可能对一些基本的东西感到困惑..但我就是不能说清楚

这里有两件事

  1. UIViewController
  2. UIViewController 中的 UIView 对象

这是我所做的:

1)创建一个Single View的项目->从故事板,我把UIView拖到UIViewController上

2) new->file to create myUIViewClass.h and myUIViewClass.m 这是 UIView 的子类。

3) 将我拖出来的UIView的"Custom Class"赋值给myUIViewClass

4) 回到 UIViewController,按住 control 并拖动 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
}

好迷茫!

您只需要做以下事情:

- (void)viewDidLoad {
    [super viewDidLoad]; //dont forget this
    self.uiview.arrayInsideUIView = @[@"one", @"two"];
}

因为视图与情节提要挂钩,情节提要会处理视图的创建,因此无需 alloc/init 自己动手。

如果你自己分配初始化它(你目前正在做的),你正在替换故事板设置的那个,所以你必须自己从头开始完全设置它(框架位置等)这可能不是什么你要。