我想用视图创建一个不同的类,并在屏幕上调用该类。 当我运行应用程序时,视图不会出现。如果我删除该结构并在主文件上创建按钮,它可以正常工作。当我把它放在另一个班级时,它不起作用。
MyView.h
#import <UIKit/UIKit.h>
@interface viewHome : UIViewController
-(UIView*) myHome;
@end
MyView.m(创建测试按钮)
#import "viewHome.h"
@implementation viewHome
-(UIView*) myHome {
UIView * myScreen = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
myScreen.backgroundColor = [UIColor whiteColor];
UIButton * myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
myButton.frame = CGRectMake(100,100,100,44);
[myButton setTitle:@"Login" forState:UIControlStateNormal];
[myScreen addSubview:myButton];
return myScreen;
}
@end
viewController.m [...]
- (void)viewDidLoad
{
[super viewDidLoad];
viewHome * fncScreen;
UIView * homeScreen = [fncScreen myHome];
[self.view addSubview:homeScreen];
}
由于
答案 0 :(得分:0)
将一个viewController的视图作为子视图添加到另一个viewcontroller是一种不好的做法。 (除非您使用某些允许使用childViewControllers的类/方法)。
正是由于这个原因,您的视图不会出现在一个案例中,而是出现在另一个案例中。
尝试在viewController.m中添加-(UIView*) myHome
方法,并执行
[self.view addsubview: [self myHome]];
这是一篇关于嵌套UIViewControllers的好文章:
Is it wise to "nest" UIViewControllers inside other UIViewControllers like you would UIViews?
答案 1 :(得分:0)
我在代码中看到的一个明显错误就是这一行:
viewHome * fncScreen;
好的,这是一个指针声明,但你实际上并没有创建对象。 你需要这样的东西:
viewHome * fncScreen = [[viewHome alloc] init];
然后你可以在这样的初始化对象上调用方法。
答案 2 :(得分:0)
分配视图homeScreen后,可以调用方法[fncScreen myHome]。 像这样 -
UIView *homeScreen = [[UIView alloc] init];
homeScreen = [funScreen myHome];
[self.view addSubView: homeScreen];
[homeScreen release];
希望这会对你有所帮助。