在iOS中动态创建View

时间:2012-04-20 12:25:59

标签: iphone objective-c ios uiview uiviewcontroller

我有一个带有一个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

4 个答案:

答案 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];

感谢..!