2012-12-31 9 views
11

Ho un pulsante UISegmentedControl con tre segmenti. In ViewController.m funziona perfettamente - premendo i pulsanti si attivano i metodi corretti.Come rilevare la modifica in UISegmentedControl da un'IBAzione separata

Ho un altro UIButton separato che quando viene premuto deve prima CONTROLLARE lo stato di UISegmentedControl (per vedere quale pulsante è attualmente premuto) e quindi attivare un metodo in base a quel valore di segmento.

Ecco il mio codice per quello separato UIButton. Il pulsante stesso funziona, ma non riesco a capire come ottenere il valore corrente del segmento di UISegmentedControl.

Molte grazie per qualsiasi assistenza qui. Sono nuovo a OBJ-C. So come farlo in VisualBasic, quindi le risposte che sono sul lato più verboso sarebbero più apprezzate in quanto ho bisogno di sapere il 'perché'. Grazie.

- (IBAction)decodeButton:(id)sender { 
    UISegmentedControl *segment = [UISegmentedControl alloc]; // THIS DOES NOT WORK. 

    if (segment.selectedSegmentIndex == 0) { 
       decode(textToDecode); 
    } else if(segment.selectedSegmentIndex == 1) { 
       decode1(textToDecode); 
    } else if(segment.selectedSegmentIndex == 2) { 
       decode2(textToDecode); 
    } 
} 
+0

cercare la mia risposta e fammi sapere se ti aiuta –

risposta

18

Here è un tutorial using UISegmentedControl in iOS.

Basta creare un oggetto di riferimento e il filo correttamente per il proprietario del file.

IBOutlet UISegmentedControl *segmentedControl; 

Poi insieme di proprietà

@property (strong, nonatomic) IBOutlet UISegmentedControl * segmentedControl; 

Sintetizzare in un file .m

@synthesize segmentedControl; 

Ora è possibile accedere al indice selezionato in qualsiasi momento.

- (IBAction)decodeButton:(id)sender { 

    if (segmentedControl.selectedSegmentIndex == 0) { 
       decode(textToDecode); 
    } else if(segmentedControl.selectedSegmentIndex == 1) { 
       decode1(textToDecode); 
    } else if(segmentedControl.selectedSegmentIndex == 2) { 
       decode2(textToDecode); 
    } 
} 
+0

Grazie, @Siba. Il tutorial era esattamente ciò che avevo bisogno di vedere. Questo codice ha funzionato perfettamente e il tutorial mi ha dato un'etichetta da mostrare - che era il mio prossimo compito. Il 2013 sta già iniziando molto bene. Ringrazio tutti voi che avete risposto. – mstace

1

Questo codice indica che si sta creando un nuovo oggetto per ogni clic

UISegmentedControl *segment = [UISegmentedControl alloc] ; 

La cosa che dovete fare prendere IBOutlet (proprietà) della vostra segmentedControl poi lavorerò per voi. non creare un nuovo oggetto nel metodo button. quando farai un IBOutlet sarà collegato a segmentControl e il tuo codice funzionerà in quel momento. Grazie

3

È necessario rimuovere UISegmentedControl *segment = [UISegmentedControl alloc] ; dal codice, in quanto Allocati nuovo esempio del vostro UISegmentedControl ogni volta, invece,

creare uno sbocco per voi UISegmentController come

@property (strong, nonatomic) IBOutlet UISegmentedControl * segment; 

e poi più tardi in qualsiasi momento nel file viewcontroller.m, è possibile ottenere il segmento selezionato utilizzando

segment.selectedSegmentIndex; 

Spero che questo ha senso,

saluti

4

Il codice alloc ogni volta UISegmentedControl nell'azione premere il pulsante. Quindi utilizzare il seguente codice per la creazione di sUISegmentedControl e la sua azione.

SegmentChangeView=[[UISegmentedControl alloc]initWithItems:[NSArray arrayWithObjects:@"Segment1",@"Segment2",@"Segment3",nil]]; 
    SegmentChangeView.frame=CGRectMake(5, 44, self.view.bounds.size.width-10, 33); 
    SegmentChangeView.selectedSegmentIndex=0; 
    SegmentChangeView.segmentedControlStyle=UISegmentedControlStyleBar; 
    SegmentChangeView.momentary = YES; 
    [SegmentChangeView setTintColor:[UIColor blackColor]]; 
    NSDictionary *attributes =[NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"Arial" size:13],UITextAttributeFont,nil]; 
    [SegmentChangeView setTitleTextAttributes:attributes forState:UIControlStateNormal]; 
    [SegmentChangeView addTarget:self action:@selector(SegmentChangeViewValueChanged:) forControlEvents:UIControlEventValueChanged]; 
    SegmentChangeView.autoresizingMask=UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleBottomMargin; 
    [self.view addSubview:SegmentChangeView]; 

-(IBAction)SegmentChangeViewValueChanged:(UISegmentedControl *)SControl 
{ 
    if (SControl.selectedSegmentIndex==0) 
    { 
      decode(textToDecode); 
    } 
    else if (SControl.selectedSegmentIndex==1) 
    { 
      decode1(textToDecode); 
    } 
else if (SControl.selectedSegmentIndex==2) 
    { 
      decode2(textToDecode); 
    } 


} 
1

Prova come questo

- (IBAction)segmentedControlChanged:(id)sender 
{ 
    UISegmentedControl *s = (UISegmentedControl *)sender; 

    if (s.selectedSegmentIndex == 1) 
    { 
     //code 
    } 
    else 
    { 
     //code 
    } 
} 
Problemi correlati