Ios UIView在加载NIB文件后是否显示即时电视?

Ios UIView在加载NIB文件后是否显示即时电视?,ios,uiview,nib,addsubview,Ios,Uiview,Nib,Addsubview,我尝试将UIView添加到我的应用程序中。它确实有效,但并不像预期的那样。我在标题中定义了socialActionView,并在视图控制器中创建了@synthesis 当用户点击按钮时,nib文件被加载。我想我必须调用addSubview方法来显示视图。但即使是我,它也会出现,我不这么做 如果我调用addSubView方法,当我加载带有消息“警告:无法恢复以前选择的帧”的视图时,应用程序会崩溃 有人能解释一下这是怎么回事吗?我不明白 - (IBAction)didTapOkSocialActio

我尝试将UIView添加到我的应用程序中。它确实有效,但并不像预期的那样。我在标题中定义了socialActionView,并在视图控制器中创建了@synthesis

当用户点击按钮时,nib文件被加载。我想我必须调用addSubview方法来显示视图。但即使是我,它也会出现,我不这么做

如果我调用addSubView方法,当我加载带有消息“警告:无法恢复以前选择的帧”的视图时,应用程序会崩溃

有人能解释一下这是怎么回事吗?我不明白

- (IBAction)didTapOkSocialAction:(id)sender;
{
    self.socialActionView = [[[NSBundle mainBundle] loadNibNamed:@"SocialActionViewController" owner:self options:nil] objectAtIndex:0];
    //[self.view addSubview:socialActionView];
}
编辑


在本例中,解决方案是将my SocialActionViewController.xib的文件所有者设置为ViewController.h。我还不知道如何从NIB添加UIView,该UIView附加到另一个视图控制器类,而不是加载视图的视图控制器类。

您的
socialActionView
已绑定到其superview中的视图占位符

因此:它已经在那里(它的引用已经作为子视图添加),但是在您实际加载它之前它是
nil

编辑:现在还不清楚你是如何把所有的东西都连接到那里的,但是从你下面添加的信息中,我可以大胆猜测一下

请尝试以下代码:

- (IBAction)didTapOkSocialAction:(id)sender;
{
    UIView *loadedView = [[[NSBundle mainBundle] loadNibNamed:@"SocialActionViewController" owner:self options:nil] objectAtIndex:0];

    [self.view addSubview:loadedView];
}
编辑:由于您希望通过编程方式从.xib加载viewcontroller,因此可以这样做(MyViewController.h、.m、.xib中定义了支持的viewcontroller):

然后,您可以添加它的视图:

[self.view addSubview: myViewController.view];

如果我以这样的编程方式创建UIView

- (IBAction)didTapOkSocialAction:(id)sender;
{
    UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(20, 20, 100, 100)];
    myView.backgroundColor = [UIColor whiteColor];
    [self.view addSubview:myView];
    [myView release];
}
那么addSubView是不可避免的。否则myView将不会出现。我已经测试过了。但是,如果UIView是从nib加载的,则似乎有不同的行为。它马上就出现了


在第二次测试中,我删除了属性,只剩下局部变量。

啊,我明白了。我已经猜到了。但即使我将其更改为:UIView*socialActionView=[[NSBundle mainBundle]loadNibNamed:@“SocialActionViewController”所有者:self-options:nil]objectAtIndex:0];它仍然会立即显示UIView。这是通常的行为吗?我只是想知道,如果不再需要addSubView,它有什么用处?@rockstarberlin:您最好立即加载它,将
hidden
属性设置为
YES
,然后在用户点击按钮时将其取消隐藏。但这取决于你的应用程序的结构和层次结构,所以我真的不能说。@rockstarberlin:当然,addSubview仍然是需要的,只是在其他情况下。至于您的第二个测试:这很奇怪——编译器至少应该发出警告——如果您有同名的属性和局部变量。hm,是的,也许您是对的。我认为最好的做法是在需要时才加载东西。谢谢您的回答。在这种情况下,您必须实例化第二个viewController(并在ivar中保留对它的引用或作为属性),并将其视图添加到第一个viewController的视图中。
- (IBAction)didTapOkSocialAction:(id)sender;
{
    UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(20, 20, 100, 100)];
    myView.backgroundColor = [UIColor whiteColor];
    [self.view addSubview:myView];
    [myView release];
}