从ViewController外部向视图添加UILabel

时间:2014-11-16 18:56:54

标签: ios objective-c cocoa-touch

我在ViewController中有一个UIView,用于创建和显示标签。而且,它做得很好。但是,我想要做的是能够调用其他类文件中的方法,并让它们能够将UILabel添加到我的视图中,但是我无法做到这一点。

我在SO上尝试了其他一些答案,例如:

How to perform a [self.view addSubview: lbl] outside of ViewController Class scope?

但由于某种原因,这在我的项目中不起作用。我一定不是没有正确应用它,或者其他人可能有另外的选择?

我尝试了十几种不同的方法。这似乎是一种方法,我可以在我的ViewController中创建我的UIView作为属性,以便可以从其他类访问,然后,在我的其他类文件中,我可以创建一个新的实例,该实例是该ViewController的成员类,然后添加新的子视图,它们会出现。但是,我错了。这是我最近的错误。

--ViewController.h

#import <UIKit/UIKit.h>
#import "OtherClass.h"

@interface ViewController : UIViewController

@property UIView *myView;

@end

--ViewContoller.m 


- (void)viewDidLoad {
    [super viewDidLoad];



    // Do any additional setup after loading the view, typically from a nib.

    self.myView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.height, self.view.frame.size.width)];

    self.myView = (UIView *)self.view;

    UILabel *myLabel = [[UILabel alloc] init];

    myLabel.text = @"Label #1";

    myLabel.textColor = [UIColor blackColor];

    myLabel.frame = CGRectMake(50,50,200,50);

    [self.myView addSubview:myLabel];

    OtherClass *oc = [[OtherClass alloc] init];


    [oc methodInOtherClass];

}

--OtherClass.m

- (void) methodInOtherClass {

    NSLog(@"hello!  In the other class file now.");

    UILabel *nooLabel = [[UILabel alloc] init];

    nooLabel.text = @"Label #2!”;

    nooLabel.frame = CGRectMake(75, 75, 100, 50);

    nooLabel.textColor = [UIColor blackColor];

    UIView *nooView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    nooView.backgroundColor = [UIColor redColor];

    [nooView addSubview:nooLabel];

    ViewController *myView2 = [[ViewController alloc] init];

    [myView2.myView addSubview:nooView];

}

@end

1 个答案:

答案 0 :(得分:0)

您可以将视图传递给其他类的方法。现在,您正在创建一个视图控制器并为其添加标签,但您没有对新的视图控制器执行任何操作。

在第一堂课:

[oc methodInOtherClass:self.view];

在第二节课:

- (void) methodInOtherClass:(UIView*)view {

    UILabel *nooLabel = [[UILabel alloc] init];
    nooLabel.text = @"Label #2!”;
    nooLabel.frame = CGRectMake(75, 75, 100, 50);
    nooLabel.textColor = [UIColor blackColor];

    UIView *nooView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    nooView.backgroundColor = [UIColor redColor];
    [nooView addSubview:nooLabel];

    [view addSubview:nooView];
}

正如其他人所指出的那样,这可能不是解决这个问题的正确方法,但我不会在这里对你的架构做任何假设。