Objective c 为什么不是';这个子视图不是被删除了吗?

Objective c 为什么不是';这个子视图不是被删除了吗?,objective-c,ios,cocoa-touch,Objective C,Ios,Cocoa Touch,IBAction什么都不做。将“返回”日志记录到控制台,以便连接正常。调用iAction时,self.topView也不执行任何操作 -(IBAction)loadSettingsView:(id)sender; { if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { [[NSBundle mainBundle] loadNibNamed:@"setting

IBAction什么都不做。将“返回”日志记录到控制台,以便连接正常。调用iAction时,self.topView也不执行任何操作

-(IBAction)loadSettingsView:(id)sender;

{

    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
        [[NSBundle mainBundle] loadNibNamed:@"settingsView_iphone" owner:self options:nil]; 
    } else {
        [[NSBundle mainBundle] loadNibNamed:@"settingsView_ipad" owner:self options:nil];
    }
    [self.view addSubview:topView];
}

-(IBAction)loadMainView:(id)sender;
{
    [topView removeFromSuperview];
    NSLog(@"back");

}

我希望我在这里没有做太多的假设,但这应该可以解决你的问题。我假设
topView
是当前类的成员:

-(IBAction)loadSettingsView:(id)sender;

{

    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
        topView = [[[NSBundle mainBundle] loadNibNamed:@"settingsView_iphone" owner:self options:nil] objectAtIndex:0]; 
    } else {
        topView = [[[NSBundle mainBundle] loadNibNamed:@"settingsView_ipad" owner:self options:nil] objectAtIndex:0];
    }
    [self.view addSubview:topView];
}

-(IBAction)loadMainView:(id)sender;
{
    [topView removeFromSuperview];
    NSLog(@"back");

}

基本上,您使用的
loadNibNamed
方法返回一个包含nib中所有顶级视图的数组。如果您想引用这些视图(这里我假设nib中有一个视图),您需要实际分配
topView
变量。当前
topView
可能为零,因此您的
removeFromSuperview
调用没有任何作用。

我希望我在这里没有做太多假设,但这应该可以解决您的问题。我假设
topView
是当前类的成员:

-(IBAction)loadSettingsView:(id)sender;

{

    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
        topView = [[[NSBundle mainBundle] loadNibNamed:@"settingsView_iphone" owner:self options:nil] objectAtIndex:0]; 
    } else {
        topView = [[[NSBundle mainBundle] loadNibNamed:@"settingsView_ipad" owner:self options:nil] objectAtIndex:0];
    }
    [self.view addSubview:topView];
}

-(IBAction)loadMainView:(id)sender;
{
    [topView removeFromSuperview];
    NSLog(@"back");

}

基本上,您使用的
loadNibNamed
方法返回一个包含nib中所有顶级视图的数组。如果您想引用这些视图(这里我假设nib中有一个视图),您需要实际分配
topView
变量。当前
topView
可能为零,因此您的
removeFromSuperview
调用没有任何作用。

提供一个更简单的解决方案。只需在主视图的nib中创建一个新视图,并在其上附加一个IBOutlet。像做梦一样工作

-(IBAction)loadSettingsView:(id)sender;
{
        [self.view addSubview:settingsView];
}

-(IBAction)loadMainView:(id)sender;
{
    [settingsView removeFromSuperview];
}

为更简单的解决方案提供资金。只需在主视图的nib中创建一个新视图,并在其上附加一个IBOutlet。像做梦一样工作

-(IBAction)loadSettingsView:(id)sender;
{
        [self.view addSubview:settingsView];
}

-(IBAction)loadMainView:(id)sender;
{
    [settingsView removeFromSuperview];
}

什么是
topView
以及如何分配它?…哪个iAction不做任何事情?问题是“为什么不删除此子视图?”什么都不做的iAction加载MainView什么是
topView
以及如何分配它?…哪个iAction不做任何事情?问题是“为什么不删除此子视图?”不执行任何操作的IBAction加载MainView…这似乎是一种分配topView的糟糕方式。我建议使用IBOutlet…这是有道理的。那么,我该如何使topView不为零呢?…这似乎是一种分配topView的糟糕方式。我建议使用IBOutlet…这是有道理的。那么我该如何让topView不为零呢?