2011-08-23 2 views
5

Sono sicuro che questo è facile per qualcuno là fuori. Ho un UISegmentedControl che sto usando come un pulsante (in modo da non dover utilizzare il pulsante di default brutto) e sto avendo difficoltà a raggiungere l'obiettivo di lavorare .... codice come segueUISegmentedControl e aggiunta di obiettivi

- (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]; 



} 

e poi

-(void)changeFilter:(id)sender{ 

} 

per qualche motivo, facendo clic su UISegmentedControl non si attiva il metodo di destinazione.

Come appendice, c'è un modo più semplice per creare UIButtons dall'aspetto gradevole? Non ho accesso a Photoshop al lavoro (anche se ho installato gimp), quindi un modo che non implichi la creazione di immagini sarebbe buono. Non riesco a credere che la mela non fornisca UIButtons dall'aspetto piacevole nell'interfaccia utente, sembra una cosa così fondamentale da aver bisogno?

In ogni caso, grazie per l'aiuto mis amigos.

grazie per le risposte ... Ho provato la difficoltà, ma ancora non si accende

Ora ho

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

poi

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

e

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

Si noti che il metodo è nella stessa classe di UISegmentedControl. Forse dovrei provare a usare l'API del pulsante Glass che è stata suggerita, ma il mio capo mi odia usando librerie di terze parti se c'è un modo per evitarlo!

risposta

8

Il selettore è errato. Deve essere, action:@selector(changeFilter:), e modificare l'evento in forControlEvents:UIControlEventValueChanged, come UISegmentedControl non invia alcuna azione per UIControlEventTouchUpInside evento.

+0

l'ho fatto e la sua ancora non sparare – shaw2thefloor

+0

modificare l'evento anche. Controlla la mia risposta modificata. – EmptyStack

+0

Ah, che il biglietto ... thaks per tutte le risposte. – shaw2thefloor

5

file h u dimenticato di mettere questo

 -(void)changeFilter:(id)sender; 

poi

change this 

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

To 

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

L'azione invia automaticamente al mittente quindi basta provare @selector (changeFilter :).

Per quanto riguarda la seconda domanda, ios5 ti aiuterà là fuori ... ma non posso ancora dirlo molto. Per ora, puoi usare alcune classi di Uibutton che le persone hanno fatto per creare facilmente dei bei pulsanti. Eccone uno:

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