【问题标题】:Send data TO UIView FROM UIViewController?从 UIViewController 向 UIView 发送数据?
【发布时间】:2015-04-17 04:15:10
【问题描述】:

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

我可能对一些基本的东西感到困惑..但我就是无法直截了当

这里有两件事

  1. UIViewController
  2. UIViewController 中的 UIView 对象

这是我所做的:

1) 创建一个单视图项目 -> 从情节提要中,我将 UIView 拖到 UIViewController 上

2) new->创建 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
}

好困惑!

【问题讨论】:

  • 既然你去了@property (strong, nonatomic) IBOutlet myUIViewClass *uiview;,这个uiview 是在情节提要中挂钩的吗?例如,@property 左侧的小圆圈是填充的还是空的?
  • 是的,它已连接。圆圈也被填满了。

标签: ios objective-c iphone uiview uiviewcontroller


【解决方案1】:

您需要做的就是以下几点:

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

因为视图与情节提要挂钩,情节提要处理视图的创建,因此无需自己分配/初始化。

如果您自己进行 alloc init(您目前正在这样做),您将替换情节提要设置的那个,因此必须自己从头开始完全设置它(帧位置等),这可能不是您想要的.

【讨论】:

  • 我明白了!我想我现在明白了。谢谢
  • 重新分配已经存在的东西是你所说的问题。清理东西
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-14
  • 1970-01-01
相关资源
最近更新 更多