我在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
答案 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];
}
正如其他人所指出的那样,这可能不是解决这个问题的正确方法,但我不会在这里对你的架构做任何假设。