2012-03-22 11 views
30

Tengo un UINavigationController. En la parte superior derecha tengo un botón al hacer clic en el cual tengo que obtener una vista de tabla desplegable. Creé otra Clase UIViewController, con xib y la agregué como subvista a la vista actual. Debería aparecer en el primer clic y desaparecer en el segundo clic. Esto debería ocurrir para todos los clics (vista abierta y vista cercana). Escribí este código pero no sé dónde me estoy equivocando. alguien por favor ayudaIphone eliminar vista secundaria

-(void)modalTableView 
{ 
tableView1 = [[TableViewController alloc] initWithNibName:@"TableViewController" bundle:nil]; 

for (UIView *subView in self.view.subviews) 
{ 

    if ([subView isKindOfClass:[TableViewController class]]) 
    { 

     [subView removeFromSuperview]; 
    } 

    else 
    { 
     [self.view addSubview:tableView1.view]; 

    } 
    } 

} 

¿Qué es lo que me falta?

EDIT: TableViewController es el nombre de mi clase UIViewController

Respuesta

62

La pista está aquí

for (UIView *subView in self.view.subviews) 

cada subvista es de UIView clase y su prueba

isKindOfClass:[TableViewController class] 

es la prueba de clase TableViewController

Sugeriría que una forma de hacerlo sería etiquetando las vistas que agrega dinámicamente, digamos 99, y luego en su ciclo puede identificar esas vistas por su etiqueta.

por ejemplo.

for (UIView *subView in self.view.subviews) 
{ 
    if (subView.tag == 99) 
    { 
     [subView removeFromSuperview]; 
    } 
} 
4

Prueba de esto,

if ([subView isKindOfClass:[UITableView class]]) 
{ 

    [subView removeFromSuperview]; 
} 
+0

tengo una vista de tabla en mi opinión también. Entonces, ¿qué está haciendo esto es eliminar la vista de tabla en mi opinión y no el controlador de vista que agregué como una vista –

+0

? Está funcionando si su condición funciona correctamente. http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/Reference/NSObject.html#//apple_ref/occ/intfm/NSObject/isKindOfClass: – chinthakad

3

Aquí es algo que debe de alguna manera a trabajar - si se asume que es un tableView1 @property retenida (Si no es así, entonces tal vez this SO responder en técnicas de carga diferida es para tú).

-(void)modalTableView 
{ 
    if (tableView1 != nil) 
    { 
     tableView1 = [[TableViewController alloc] initWithNibName:@"TableViewController" bundle:nil]; 
    } 

    if (tableView1.view.superview == nil) 
    { 
     [self.view addSubview:tableView1.view]; 
    } else 
    { 
     [tableView1.view removeFormSuperview]; 
    } 
} 
+0

simplemente va a el segundo bucle if donde se agrega una subvista. n yes tableview1 se conserva en sus propiedades. –

+0

Entonces, si ya tiene una super visión, debe haberla agregado a algo previamente ... sigue comprobando que debes estar cerca de allí. ¿Desea publicar su código revisado ahora? – Damo

5

versión Swift

Esta respuesta es para aquellos que no están familiarizados con Objective-C. Es un poco más general que la pregunta.

Para eliminar un solo subvista:

subView.removeFromSuperview() 

para eliminar todos los subvistas:

for subView in self.subviews as [UIView] { 
    subView.removeFromSuperview() 
} 

Fuente: What is the best way to remove all views from parent view/super view?

Cuestiones relacionadas