¿Por qué no se elimina esta subvista?

IBAction no hace nada. Registra "Volver" a la consola para que la conexión esté bien. self.topView tampoco hace nada cuando se llama a IBAction

-(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");

}

preguntado el 12 de junio de 12 a las 20:06

lo que es topView y como se asigna? -

...¿Qué IBAction no hace nada? -

La pregunta es "¿Por qué no se elimina esta subvista?" La IBAction que no hace nada loadMainView -

2 Respuestas

Espero no estar haciendo demasiadas suposiciones aquí, pero esto debería resolver su problema. Estoy asumiendo topView es miembro de la clase actual:

-(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");

}

Básicamente, el loadNibNamed El método que está utilizando es devolver una matriz con todas las vistas de nivel superior en la punta. Si desea una referencia a estas vistas (y aquí estoy asumiendo que hay una vista en la punta), debe asignar su topView variable. Actualmente topView es probablemente cero, por lo que su removeFromSuperview la llamada no hace nada.

Respondido el 12 de junio de 12 a las 20:06

...Esa parece una forma horrible de asignar topView. Yo sugeriría usar un IBOutlet.... - Daniel

Eso tiene sentido. Entonces, ¿cómo haría para que topView no sea nulo? - frankie

Financiar una solución mucho más fácil. Simplemente cree una nueva vista en el plumín de la vista principal y adjunte un IBOutlet. Funciona como un sueño.

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

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

Respondido el 12 de junio de 12 a las 22:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.