2013-07-12 19 views
13

Sto tentando di sostituire il comportamento della modalità di modifica predefinita delle celle.UITableViewCell Modifica personalizzata vista

Non desidero visualizzare il cerchio rosso con la vista accessoria linea sinistra.

All'accesso alla modalità di modifica, ho bisogno di spostare la vista del contenuto a sinistra & visualizzare il mio pulsante di cancellazione.

Quello che ho finora (personalizzato UITableViewCell) sostituisce:

-(void) setEditing:(BOOL)editing animated:(BOOL)animated 
{ 
    /* don't call super */ 
// [super setEditing:editing animated:animated]; 
    _isEditing = editing; 

    CGFloat newContentViewX = 0.0f; 
    UIColor *newDeleteButtonColor = [UIColor clearColor]; 

    if (_isEditing) 
    { 
     newContentViewX = -40.0f; 
     newDeleteButtonColor = [UIColor redColor]; 
    } 

    if (animated) 
    { 
     [UIView animateWithDuration:0.5f 
           delay:0.0f 
          options:UIViewAnimationOptionCurveEaseInOut 
         animations:^ 
     { 
      self.contentView.x = newContentViewX; //change frame.origin.x 
      _deleteButton.backgroundColor = newDeleteButtonColor; 
     } 
         completion:nil]; 
    } 
    else 
    { 
     self.contentView.x = newContentViewX; //change frame.origin.x 
     _deleteButton.backgroundColor = newDeleteButtonColor; 
    } 
} 

-(BOOL) editing 
{ 
    return _isEditing; 
} 

& questo è il risultato: setEditing:NO setEditing:YES

Il codice di cui sopra funziona benissimo! Fino a quando non inizia a scorrere & la visualizzazione del contenuto viene reimpostata. torna alla prima immagine. Il flag di modifica non mantiene le modifiche al frame della viewview.

Ho aggiunto questa linea:

[cell setEditing:_tableView.isEditing animated:NO]; 

in cellForRowAtIndexPath & anche se sta chiamando modalità di modifica & impostazione correttamente il mio contentView è ancora nella posizione originaria & non aggiornato

breve video di youtube problema che spiega : Youtube link

Qualcun altro ha avuto questo problema?

+5

Si dovrebbe ottenere +1 solo per fare un video di YouTube. Molto facile da capire ora. –

risposta

2

Il problema è che UITableView è "utile" per impostare il layout di stato appropriato con la cella restituita da cellForRowAtIndexPath.

Il modo più semplice per gestire questo è quello di sovrascrivere -visualizzare le visualizzazioni nella classe della cella.

- (void)layoutSubviews 
{ 
    if (self.editing) 
    { 
    CGRect bounds = self.bounds; 
    // do your custom layout 
    } 
    else 
    [super layoutSubviews]; 
} 

Questo dovrebbe risolvere le cose in modo abbastanza ordinato.

3

Non manomettere il riquadro di visualizzazione del contenuto. Basta creare il tuo pulsante e impostarlo come editingAccessoryView e la presentazione sarà fatta per te.

+0

Sì, ad eccezione del fatto che si ottengono ancora i pulsanti del cerchio (-) sulla sinistra e sposta la vista del contenuto a destra – Ryan

+1

In 'tableView: editingStyleForRowAtIndexPath:' return 'UITableViewCellEditingStyleNone'. Si consiglia inoltre di personalizzare come e quando la cella viene impostata in modalità di modifica (per eliminare il tocco). – Wain

1

Sembra che si soffra di un effetto collaterale di come UITableView passa il messaggio setEditting alle sue celle figlio. I documenti affermano che la TV invia questo messaggio alle celle VISIBILI (solo). Pertanto, quando una cella nuova/dequalificata diventa visibile, non ha avuto il messaggio setEditting e pertanto ha _editting = NO. Pertanto, è necessario testare e impostare _editting = YES della cella nella tabellaView: cellForRowAtIndexPath: metodo, quindi si dovrebbe ottenere il comportamento di scorrimento CON il pulsante di eliminazione rivelato che si desidera.

Problemi correlati