2010-01-13 22 views
15

Tengo un UISegmentedControl que tiene seis segmentos, quiero que llamen a un método cuando el valor cambia, pero también cuando cada segmento obtiene un UIControlEventTouchDragIn porque quiero que aparezca un UILabel con su nombre cuando el la persona está tratando de seleccionar algo y arrastra el dedo por el control, pero el control segmentado no presiona esta llamada incluso cuando arrastro el objeto. Por favor ayuda. Tal vez deba crear UIButtons sobre el control que llama a los métodos tras un arrastre, pero invoque el método de cambio de valor cuando reciban un toque.UISegmentedControl delegado/Touch Events

Respuesta

-6

Podría simplemente subclasificar el control UISegmentedControl e invalidar el método - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { return; } para administrar el arrastre y la ubicación de los toques.

Siendo que no sería capaz de saber qué segmento de arrastre está activado de todos modos, es mejor que lo haga todo manualmente con un toque y realizar un seguimiento utilizando esas funciones.

+1

Ojalá lo hicieran más fácil de hacer. ¡¡DE VERDAD LO HAGO!! – Jaba

33

Tal vez no entiendo bien su pregunta, pero no pudieron usar simplemente esto:

[segmentedControl addTarget:self 
     action:@selector(action:) 
     forControlEvents:UIControlEventValueChanged]; 

y simplemente reemplazar el UIControlEventValueChanged por UIControlEventTouchDragIn? Luego, en su método de acción, haga lo que sea necesario, como cambiar el texto de un UILabel.

Tengo un UITAbleView con un montón de celdas y un UISegmentedControll en cada celda y funciona muy bien para mí.

La documentación para UISegmentedControl parece no estar disponible en línea pero se puede ver en el Organizador de XCode y el código anterior es el primer ejemplo.