2012-05-29 12 views

risposta

5

Basta trascinare un UISwitch sulla cella che hai disposto. È quindi possibile utilizzare l'editor di assistente (che è fantastico) per collegarlo alla classe genitore. Un consiglio che ti darò, se stai pianificando diverse celle che saranno simili nell'aspetto, crea il primo nella sezione e disponilo giusto, quindi puoi aumentare il numero di righe in quella sezione e IB creerà delle copie della riga esistente per te.

+0

+1 statico tv rendono facile come torta. :) – lnafziger

+7

nota che per trascinare un elemento UISwitch su UITableViewCell statico mentre lo storyboarding, la cella deve essere di stile "Custom" – Archie1986

+0

@ Archie1986 Funziona anche per le celle "Basic", anche se con qualche coercizione. –

0

Lo fai esattamente come nella domanda a cui ti sei collegato. Non esiste una tabella "dinamica". Il tavolo mostra solo il tuo modello. Il tuo modello potrebbe essere dinamico, ma la tabella non lo è. In ogni caso, segui la risposta a questa domanda e avrai un passaggio nella tua vista tabella.

+0

Questo non è corretto. A partire da iOS 5, ci sono tabelle delle tabelle statiche che non richiedono alcuna origine dati, al contrario, le celle di Prototipo dinamico necessitano di un'origine dati di qualche tipo. –

+0

Abbastanza giusto. Non ne ero consapevole. Dopo aver letto i documenti, sembra ancora più semplice usare cellForRowAtIndexPath. – sosborn

+2

Vedere il collegamento del video nella mia risposta modificata, penso che cambierai idea su quanto sia facile aggiungere oggetti a una TV SC –

2

Io creo una funzione per questo caso e il suo lavoro è buono per me .. prova, prima nella creazione della cella puoi controllare la riga in cui vuoi aggiungere uno, per es.

if(indexPath.row == 0) 
     [self createOnOffView:cell withTitle:@"Somthing" withTag:1001 defaultVal:YES]; 

E la funzione è:

- (void) createOnOffView:(UITableViewCell*) cell withTitle:(NSString*) title withTag:(int)tag defaultVal:(BOOL) defaultVal 
{ 
    CGRect rect; 

    cell.textLabel.text = title; 
    cell.selectionStyle = UITableViewCellSelectionStyleNone; 

    rect = cell.contentView.frame; 

    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
     rect.origin.x = cell.frame.size.width - 20; 
    else 
     rect.origin.x = rect.size.width/2 +35; 

    rect.origin.y = rect.size.height/2 - 15;  
    rect.size.width = 60;  

    UISwitch *switchView = [[UISwitch alloc] initWithFrame:rect]; 
    [cell.contentView addSubview:switchView]; 
    [switchView addTarget:self action:@selector(didChangeSwitch:) forControlEvents:UIControlEventValueChanged]; 

    switchView.tag = tag; 

    [switchView setOn:defaultVal]; 

    [switchView release]; 
} 

E quando il valore è interruttore è cambiare questo metodo sarà licenziato .. in modo da poter sapere quali accendere basato sul tag

- (void) didChangeSwitch:(UISwitch*)switchView 
{ 
    if(switchView.tag == 1001) 
    { 
     //Do Somthing 
    } 

    if(switchView.tag == 1002) 
    { 
     //Do Somthing 
    }  
} 

Spero che questo sia utile :)

+1

Questo non è neanche lontanamente facile come semplicemente trascinando il passaggio sulla cella che si desidera sia utilizzando Interface Builder. Guarda come funzionano i tableivews di Static Cell. Non è necessario alcun metodo di datasource quando si usano questi, basta collegare IBActions per oggetti proprio come in un normale ViewController. –

15

Ecco come funziona in Interface Builder. Non c'è bisogno di codice.

  • Trascinare un UISwitch nel View Controller. Deve essere al di fuori della vista principale . Ti sto solo rilassando con alcune altre cose.

  • Ctrl-Fare clic sulla cella della vista tabella che dovrebbe avere questo interruttore e trascinare sul nuovo Switch. Vedi 1. enter image description here

  • Collegare l'interruttore alla presa della vista accessorio della cella di visualizzazione tabella. Vedi 2. enter image description here

eseguire l'applicazione e guardare l'interruttore compare nella tabella - fatto!

Nota: l'interruttore in modo strano non viene visualizzato nel generatore di interfaccia. Ma verrà visualizzato quando si esegue l'app

Se si desidera collegarlo anche a una variabile di istanza, ad esempio in modo che sia possibile leggere la sua proprietà "on" in un secondo momento, collegarlo a una presa come faresti altro punto di vista 3, 4.

enter image description here enter image description here

PS: Tenete a mente che UISwitch stato on/off è nella sua "on" di proprietà, non "selezionato". Sto solo aggiungendo questo perché è un po 'confuso.

PPS: Ci scusiamo per il pix sovradimensionato, sono su uno schermo retina.

+0

Sembra promettente .. ma dopo il 2 ° passaggio e su "Questo farà apparire l'interruttore nella tabella - fatto!" parte non vedo l'interruttore visualizzato nella tabella. Sono abbastanza sicuro di aver seguito correttamente i passaggi mentre vedo le uscite scure di popup - appaiono gli accessori. Qualche indizio? – Bruce

+0

Bene, esegui l'app: vedi l'interruttore? Ho appena realizzato che non compare in Interface Builder. Ma sarà nella cella quando eseguirai l'app. Provalo Una volta che funziona per te aggiornerò la dicitura lassù. – n13

+0

Hai ragione, sembra proprio nel posto giusto che voglio che sia. Eccezionale! Sto anche cercando di agganciare l'interruttore per eseguire del codice ogni volta che viene capovolto. Qualche indicazione? – Bruce

Problemi correlati