Estoy creando un UIActionSheet
en actionSheet: clickedButtonAtIndex método delegado.UIActionSheet tarda mucho tiempo para responder
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
if(buttonIndex == 1){
[self.myFirstView removeFromSuperview];
if (!self.mySecondView) {
[[NSBundle mainBundle] loadNibNamed:@"MySecondView" owner:self options:nil];
}
[self.mySecondView setFrame:CGRectMake(0, 0, 320, 480)];
[[UIApplication sharedApplication].keyWindow addSubview: self.mySecondView];
UIActionSheet * action = [[UIActionSheet alloc]initWithTitle:@""
delegate:self
cancelButtonTitle: nil
destructiveButtonTitle: deleteContacts
otherButtonTitles: cancel, nil];
action.tag = 102;
[action showInView:self.view];
[action release];
}
que controlen el evento clic de este UIActionSheet
en el mismo método exacto que el anterior.
if(actionSheet.tag == 102){
if(buttonIndex == 0){
if([[NSBundle mainBundle] loadNibNamed:@"MyThirdView" owner:self options:nil]) {
[self.myThirdView setFrame:CGRectMake(0, 0, 320, 480)];
[[UIApplication sharedApplication].keyWindow addSubview:self.myThirdView];
}
[self.mySecondView removeFromSuperview];
[self.doneButton.target performSelector:self.doneButton.action withObject:self.doneButton.target];
[self performSelector:@selector(RemoveView) withObject:self afterDelay:3.0];
}
}
El problema que estoy enfrentando es que, la UIActionSheet
toma demasiado tiempo para responder. Cuando hago clic en el botón UIActionSheet
, se congela durante 2 o 3 segundos, antes de que se carguen myThirdView
. No puedo entender, ¿cuál es el retraso de respuesta en este caso, ya que lo primero que hago en el UIActionSheet
botón haga clic en el método de evento es cargar myThirdView
. El resto del código se ejecuta solo después del código para cargar myThirdView. Pero incluso la primera línea de código parece ejecutarse después de un retraso. ¿Alguna sugerencia?
Funciona cuando se cambia '[showInView acción: self.view];' a '[showInView acción: self.mySecondView];'? – Felix
Funciona. Pero no hay cambios significativos en la velocidad de respuesta de la hoja de acción. –
Creo que la respuesta correcta debería ser combinar las respuestas de The Saad y Andrew Zimmer. El código que debería ejecutarse en el hilo de fondo es esta línea de código '[self.doneButton.target performSelector: self.doneButton.action withObject: self.doneButton];'. El resto del código, incluido el método 'RemoveView', debe ejecutarse en el hilo principal. Mención especial a Gabriel por simular una acción táctil. –