2013-06-22 9 views
6

Esiste un modo per disabilitare UITableViewCell dall'attivazione del delegato didSelectCellAtIndexPath:, pur mantenendo la possibilità di utilizzare un UISwitch nella vista accessoria di quella cella.Come disattivare un UITableViewCell ma si hanno ancora interazioni con le viste accessorie (es. UISwitch)

So che è possibile impostare cell.userInteractionEnabled = NO, questo disabiliterà la cella ma mi impedisce anche di utilizzare lo switch nella vista accessoria. So che potrei anche provare a rilevare quale cella è stata sfruttata nel metodo didSelectCellAtIndexPath: ma poiché la mia vista tabella è dinamica e cambia in base a ciò che l'utente sta facendo potrebbe diventare disordinato.

Sto cercando una soluzione semplice ed elegante che potrei usare. Qualche idea?

risposta

7

se poi non vorrai usare cell.userInteractionEnabled = NO quindi impostare cell.selectionStyle = UITableViewCellSelectionStyleNone

e lasciate che il vostro didSelectRowAtIndexPath Cella di attivazione.

Ora qui in questo metodo "didSelectRowAtIndexPath" è necessario evitare/ignorare la selezione, confrontando il tipo di oggetto dall'array dell'origine dati in quello specifico indice.

0

Aggiungi un listener di eventi direttamente al tuo UISwitch invece di fare affidamento su didSelectRowAtIndexPath.

-(void)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath { 
    // Here I assume you created a subclass MyCell of UITableViewCell 
    // And exposed a member named 'switch' that points to your UISwitch 

    MyCell* cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"]; 

    if (cell == nil) { 
     cell = [[MyCell alloc] init]; 
     cell.selectionStyle = UITableViewCellSelectionStyleNone; // This could be moved into MyCell class 
     [cell.switch addTarget:self action:@selector(switchChanged:) forControlEvent:UIControlEventValueChanged]; 
    } 

    // Now we need some way to know which cell is associated with the switch 
    cell.switch.tag = indexPath.row; 
} 

Ora per ascoltare swich eventi, aggiungere questo metodo nella stessa classe

-(void)switchChanged:(UISwitch*)switch { 
    NSUInteger cellIndex = switch.tag; 
    ... 
} 
Problemi correlati