6

En mi aplicación de iPhone, quiero agregar un indicador de actividad en la parte superior de una barra de búsqueda.Indicador de actividad cuando está integrado en la barra de búsqueda no se muestra en el SDK de iPhone

Cuando está buscando, debe mostrar el indicador de actividad.

He agregado el indicador de actividad en XIB y he creado su salida.

Lo estoy ocultando cuando finaliza la búsqueda.

pero el indicador de actividad no se visualiza.

Problema

me di cuenta de que la función de búsqueda (por ejemplo A) (en la que animo el indicador de actividad), a su vez llama a otra función (digamos B) por lo que el hilo principal está siendo utilizado en la ejecución del función B. Pero para el indicador de actividad para animar necesitamos el hilo principal.

Intenté llamar a la función B utilizando el método performSelectorInBackGround:withObject. Ahora cuando hago clic en Buscar, se muestra el indicador de actividad pero la funcionalidad de la función B no se ejecuta.

¿Qué puede ser una solución para esto?

Por favor, ayuda y sugerir

Gracias

+0

¿Cómo se oculta/muestra/anima el indicador de actividad? Ayudaría a publicar un código. – Jumhyn

+0

¿trataste de ponerlo en otro lugar en la vista para ver si funciona? Tal vez como primera respuesta, su barra de búsqueda se encuentra en la parte superior de su indicador de actividad. – Julien

Respuesta

0

Gracias a todos los muchachos por su inmensa ayuda y por apreciar la pregunta.

Disculpa a los que no he podido responder.

Tengo la solución y es la siguiente.

Acabo de escribir la siguiente línea en el evento de clic del botón Buscar.

[NSThread detachNewThreadSelector:@selector(threadStartAnimating:) toTarget:self withObject:nil];

y definido la función threadStartAnimating: de la siguiente manera:

-(void)threadStartAnimating:(id)data 
{ 
    [activityIndicator setHidden:NO]; 
    [activityIndicator startAnimating]; 
} 

Espero que esto ayude a alguien.

Gracias una vez más.

1

no hay más que suficiente en su pregunta a seguir, pero puede iniciar la depuración, me gustaría hacer lo siguiente.

  1. Verifique que la actividad esté conectada de forma variable al UIActivityIndicator que está creando en IB. (Establecería un punto de interrupción en setHidden: lines y me aseguraré de que la variable no sea nula. O arroje un NSAssert (activity, @ "¡Whoops! Actity is null"); allí)

  2. Si la variable es de hecho establecido, comenzaría a verificar que esté en el lugar correcto en la jerarquía de vistas. (Yo trataría de hacer un [self.view addSubview: activity] y ver que aparece. Puede que tenga que reemplazarlo en otro lugar.)

  3. Es posible que también desee intentar tenerlo activado por defecto en IB, hasta que tengas todo resuelto.

Buena suerte. Espero que esto ayude.

+0

Gracias por su contribución. En realidad, es un problema creado porque el indicador de actividad no obtiene el hilo principal requerido como he mencionado en mi pregunta. He editado mi pregunta. ¿Qué se puede hacer? –

+0

Si puede publicar su código viewController, puedo echarle un vistazo. Pero de improviso, creo que sus preocupaciones sobre el enhebrado probablemente no sean el problema. En base a todo lo que he leído en esta página, mi mayor sospecha es que el indicador de actividad está en el lugar equivocado en la jerarquía de vistas. –

0

Antes que nada, asegúrese de tener la actividad @synthesize en la parte superior de su archivo .m. Luego, en el método viewDidLoad, escriba activity.hidesWhenStopped = TRUE;. A continuación, en el método que se llama cuando se inicia la búsqueda, escriba [activity startAnimating]; y [activity stopAnimating]; en el método cuando se detiene la búsqueda.

+0

He hecho actividad @synthesize. En lo que respecta a comenzar a Anotar y detener el Animo, eso es lo que estoy haciendo. Consulte mi comentario anterior a su pregunta sobre el indicador de actividad ocultar/mostrar/animar. Entonces, ¿qué debo hacer ahora? –

+0

Compruebe si hay advertencias en el generador de interfaz. Si hay alguno, estarán en la esquina inferior de su archivo .xib. – Jumhyn

+0

No, no hay advertencias incluso en XIB. En realidad, parece que se ha creado un problema porque el indicador de actividad no obtiene el hilo principal requerido, tal como lo mencioné en mi pregunta. He editado mi pregunta. ¿Qué se puede hacer? –

0

probar esto:

conjunto hidesWhenStopped = NO, por lo que se muestra todo el tiempo y luego ocultar y mostrar de forma manual. Pero la Vista debe establecerse en IB para ocultarse primero.

- (void)startActivityView { 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init]; 
    activity_view.hidden = NO; 
    [pool drain]; 
} 

- (void)stopActivityView { 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init]; 
    activity_view.hidden = YES; 
    [pool drain]; 
} 

- (void)doSomething { 
    [self performSelectorInBackground:@selector(startActivityView) withObject:nil]; 
    // do some time consuming work 
    [self performSelectorInBackground:@selector(stopActivityView) withObject:nil]; 
} 
+0

thanx iPortable Comprobaré su solución :) –

+0

¡No funciona! Muestra el indicador de actividad cuando aparece la vista. Eso no es requerido. Solo se debe mostrar cuando se toca la búsqueda. Incluso traté de ocultarlo en viewWillAppear, pero aún aparece cuando aparece la vista. ¿Que debería hacer? –

+0

establezca la propiedad oculta en IB o ejecute stopActivityView en viewWillAppear en lugar de simplemente configurar la propiedad oculta en NO –

1

ahorrarse la molestia de crear un indicador de actividad personalizada y utilizar el estándar que está disponible para los que ya - en la barra superior. Además, los usuarios de la OMI tienden a esperar que alguien gire cuando algo está sucediendo.

UIApplication* app = [UIApplication sharedApplication]; 
app.networkActivityIndicatorVisible = YES; 

Obviamente, configúrelo en NO cuando su actividad termine.

+0

El indicador de actividad de la red realmente debe usarse solo para la actividad de la red. Si PARTH está buscando en una base de datos local, el indicador de actividad de la red no es apropiado. –

0

¿Quizás tiene una vista al frente de su indicador de actividad? Lo que si siempre llevarlo a la parte delantera ....

loadView = [[UIActivityIndicatorView alloc] 
      initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; 
loadView.frame = CGRectMake(0.0, 0.0, 40.0, 40.0); 
loadView.center = window.center; 
loadView.opaque = NO; 
[window addSubview: loadView]; 
[window bringSubviewToFront:loadView]; 
[loadView startAnimating]; 
0

sugiero que utilice DSActivityView para mostrar su indicador de actividad. El código fuente se puede encontrar en Dejal blog.

Mostrando y ocultando, la vista de actividad es una línea simple de código.

[DSActivityView activityViewForView:self.view];

0

empezar a animar el indicador de actividad y con un retraso de 0,1 o 0,2 a llamar otro método u quieren .... he intentado y está trabajando para mí ....

Cuestiones relacionadas