我有一个带有一个View的项目。我正在以程序化的方式绘制所有内容。所以,当我想在我的项目中添加另一个View(屏幕)时,我创建一个继承自UIViewController类的类并实现方法
- (void)viewDidLoad
然后我想从我原来的View加载这个View,我这样做:
在 ViewController.h
中#import <UIKit/UIKit.h>
#import "TestViewControllerClass.h"
@interface ViewController : UIViewController <UITableViewDataSource> {
}
@property (strong,nonatomic) TestViewControllerClass *testView;
@end
在 ViewController.m
中@implementation ViewController
@synthesize testView;
- (void)viewDidLoad
{
[super viewDidLoad];
testView = [[TestViewControllerClass alloc] init];
[self.view addSubview:testView]; //crash here
}
然后在我的 TestViewControllerClass.h
中#import <UIKit/UIKit.h>
@interface TestViewControllerClass : UIViewController
@end
TestViewControllerClass.m
- (void)viewDidLoad
{
[super viewDidLoad];
}
要检查方法 wiewDidLoad 是否会被执行,我会设置一个断点,但没有任何事情发生。事实上,我的应用程序崩溃了(我在代码处放置评论)。
当我收到崩溃时: - [TestViewControllerClass superview]:无法识别的选择器发送到实例0x683aca0
答案 0 :(得分:3)
替换
[self.view addSubview:testView]; //crash here
与
[self.view addSubview:testView.view];
答案 1 :(得分:2)
使用此代码...
[self.view addSubview:testView.view];
希望,这会对你有帮助......
答案 2 :(得分:2)
您正在做的是将ViewController设置为视图,而不是真实视图
testView = [[TestViewControllerClass alloc] init];
[self.view addSubview:testView]; //crash here
这显然会崩溃。假设您在头文件中声明了一个名为view的视图变量,请使用
testView = [[TestViewControllerClass alloc] init];
[self.view addSubview:testView.view];
答案 3 :(得分:0)
您可以在下面加载uiviewcontroller加载两种类型:
[self.view addSubview:testView.view];
(或)
在代码下面使用presentmodalviewcontroller:
testView *popupView = [[testView alloc] initWithNibName:@"testView" bundle:nil];
popupView.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentModalViewController:popupView animated:YES];
dimiss模态视图cntroller代码:
[self dismissModalViewControllerAnimated:YES];
感谢..!