2011-08-23 7 views
5

Estoy seguro de que es fácil para alguien. Tengo un UISegmentedControl el que estoy usando como un botón (a fin de no tener que usar el botón predeterminado desagradable) y estoy teniendo problemas para conseguir el objetivo de trabajar .... código de la siguiente maneraUISegmentedControl y agregar objetivos

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 

    //read.buttonType = UIBarStyleBlackOpaque; 

    UISegmentedControl* read = [[[UISegmentedControl alloc] initWithFrame:CGRectMake(5, 50, 310, 54)] autorelease]; 
    [read insertSegmentWithTitle:@"Read" atIndex:0 animated:NO]; 
    read.tintColor = [UIColor colorWithRed:0.3 green:0.3 blue:0.9 alpha:1]; 
    read.segmentedControlStyle = UISegmentedControlStyleBar; 
    [read addTarget:self action:@selector(changeFilter:sender:) forControlEvents:UIControlEventTouchUpInside]; 
    [read setTag:1]; 
    [self.view addSubview:read]; 



} 

y luego

-(void)changeFilter:(id)sender{ 

} 

por alguna razón, al hacer clic en el UISegmentedControl no se dispara el método de destino.

Como una adición, ¿hay una manera más simple de hacer lindos UIButtons? No tengo acceso a Photoshop en el trabajo (aunque tengo instalado gimp), por lo que una forma que no implique la creación de imágenes sería buena. No puedo creer que Apple no suministre UIButtons bonitos en la interfaz de usuario, parece una cosa tan fundamental que necesita?

De todos modos, gracias por la ayuda mis amigos.

gracias por las respuestas ... He intentado el arreglo, pero todavía no se dispara

ahora tengo

[read addTarget:self action:@selector(changeFilter:) forControlEvents:UIControlEventTouchUpInside]; 

continuación

@interface 
-(void)changeFilter:(id)sender; 

y

@implementation 
-(void)changeFilter:(id)sender{} 

Tenga en cuenta que el método está en la misma clase que UISegmentedControl. Tal vez debería intentar usar la API de botón de cristal que se sugirió, pero mi jefe me odia al usar bibliotecas de terceros si hay una forma de evitarlo.

Respuesta

8

El selector está equivocado. Debe ser, action:@selector(changeFilter:), y cambiar el evento a forControlEvents:UIControlEventValueChanged, como UISegmentedControl no envía ninguna acción para UIControlEventTouchUpInside evento.

+0

lo he hecho y su todavía no disparar – shaw2thefloor

+0

cambiar el evento también. Verifique mi respuesta editada. – EmptyStack

+0

Ah, que el boleto ... tiene todas las respuestas. – shaw2thefloor

5

archivo .h u olvidó poner esta

 -(void)changeFilter:(id)sender; 

continuación

change this 

[read addTarget:self action:@selector(changeFilter:sender:) forControlEvents:UIControlEventTouchUpInside]; 

To 

[read addTarget:self action:@selector(changeFilter:) forControlEvents:UIControlEventValueChanged]; 
1

La acción enviará automáticamente al remitente por lo que sólo tratar @selector (changeFilter :).

En cuanto a su segunda pregunta, ios5 lo ayudará ... pero aún no puedo decir mucho al respecto. Por ahora, puedes usar algunas clases de uibutton que las personas han creado para crear fácilmente algunos botones que tengan buen aspecto. Aquí hay uno:

http://hboon.com/glass-buttons-in-iphone-apps-without-using-image-files/

Cuestiones relacionadas