2011-10-11 10 views
5

Estoy desarrollando una aplicación para iPhone, tengo una clase UIViewController donde hay algunas animaciones de flujo de tapa y de acuerdo con el diseño tengo unos 5 botones en la parte superior de mi vista cada botón tiene un método IBAction al hacer clic en un botón que necesito para mostrar diferentes conjunto de flujo de cobertura con diferentes datos y el recuento de flujo de cobertura también cambia de acción de 1 botón a otro. Mi problema es cómo puedo actualizar mi página (volver a cargar) al hacer clic en estos botones, ya que sé que llamar explícitamente viewDidLoad es una muy mala idea, así que ¿cómo puedo lograr esto? Cualquier ayuda se agradece de antemano gracias.¿Cómo recargar mi UIViewController al hacer clic en algunos botones?

Respuesta

6

La manera más fácil de obtener una vista para volver a dibujar es llamar a [UIView setNeedsDisplay] o utilizando [UIView setNeedsDisplayInRect]. Este método le dice a la vista que necesita volver a dibujarse a sí mismo y sus subvistas. Sin embargo, no siempre deberías tener que llamar a esto. Existen otros métodos que pueden provocar que las vistas se redisen. Por ejemplo, si agrega o quita una vista a la jerarquía de vista usando [UIView addSubview:] o [UIView removeFromSuperview].

Estos métodos hacen que el sistema llame al método drawInRect: de su vista (suponiendo que lo sobreescribe con un código de dibujo personalizado). Si no anuló este método para el dibujo personalizado, debería hacer que sus subvistas reciban el mismo mensaje para que puedan tener la oportunidad de volver a dibujar.

Información adicional aquí. Lea específicamente la sección titulada "El ciclo de visualización de dibujos".

http://developer.apple.com/library/ios/#documentation/uikit/reference/uiview_class/uiview/uiview.html

3

¿Por qué quiere para recargar la página ?, si es porque va a cambiar su punto de vista y desea que se vuelva a dibujar, puede llamar a:

setNeedsDisplay(); 

Pero que a menudo no es necesario, como se cada vez que cambian los límites de una vista, se llama automáticamente.

+0

una impresionante ayudó mucho – Yohan

-7

Uso viewWillAppear función(). Esta función se llama cada vez que la vista se llama.

+2

viewWillAppear se ejecuta en la carga de la vista, no se inicia la recarga/actualización Use [self.view setNeedsDisplay]; – Vincent

1

Si hay demasiadas cosas en lugar de actualizar/volver a cargar la parte de su interés en su método viewDidLoad, puede extraer la parte refrescante en un método privado, digamos methodA. Cada vez que hace clic en su botón, llama a ese método A. Sin embargo, creo que el métodoA todavía necesita llamar a setNeedsDisplay o volver a dibujar la parte de su interés. Espero eso ayude.

1
To Refresh your UIViewController, When Clicking the button >> 

Add the below code into your UIButton method, 

-(IBAction)button:(id)sender{ 
    [self viewDidLoad]; 
    [self viewWillAppear:YES]; 
} 

Now Build and Run Your Code. 
+2

Esos son métodos de ciclo de vida que su propio código no debe invocar. – nobre

+0

¿cómo podrías actualizar el controlador de vista? por favor explique @nobre – NandhaKumar

+0

Depende del contexto. El OP menciona alguna implementación de flujo de cobertura personalizada que probablemente usa un sistema de delegado/fuente de datos para proporcionar el contenido, por lo que lo mejor sería usar su propio mecanismo de invalidación, como reloadData. Sin embargo, en general, debe extraer el código que usa en viewDidLoad o viewWillAppear que construye la interfaz de usuario para otro método, y llamarlo en su lugar cuando sea necesario. Recuerde que las restricciones personalizadas no pueden agregarse nuevamente. Puede eliminar desde Supervisión el elemento y agregarlo nuevamente. – nobre

Cuestiones relacionadas