从UIViewController发送数据到UIView?

时间:2015-04-17 04:15:11

标签: ios objective-c iphone uiview uiviewcontroller

非常大的困惑我无法解决任何问题......

我可能会对一些基本的东西感到困惑..但我不能直截了当

这里有两件事

  1. 的UIViewController
  2. UIViewController中的UIView对象

  3. 以下是我的所作所为:

    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
    }
    

    太困惑了!

1 个答案:

答案 0 :(得分:3)

您需要做的就是以下内容:

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

因为视图连接到故事板,故事板处理视图的创建,所以不需要自己分配/初始化它。

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