2013-05-30 1 views
8

Desidero implementare un comportamento personalizzato quando un utente ha un touch-down su UITableViewCell. La cosa più vicina che riesco a trovare per ottenere informazioni quando l'utente ha un touchdown è il metodo delegato tableView:willSelectRowAtIndexPath:. Tuttavia, la documentazione indica:Personalizzazione UITableViewCell Evidenziamento sul touchdown

Questo metodo non viene chiamato fino a quando gli utenti non toccano una riga e quindi sollevano il loro dito ; la riga non è stata selezionata fino a quel momento, sebbene sia evidenziata sul touchdown . È possibile utilizzare UITableViewCellSelectionStyleNone per disabilitare l'aspetto dell'evidenziazione cella sul touch-down. Questo metodo non viene chiamato quando la vista della tabella è in modalità di modifica (ovvero, la proprietà di modifica della tabella è impostata su SÌ) a meno che la vista tabella non consenta la selezione durante la modifica (ovvero la proprietà allowSelectionDuringEditing del La vista tabella è impostata su SÌ).

Qualche consiglio su come rilevare questo touchdown per eseguire il mio comportamento di evidenziazione personalizzato?

Grazie!

+0

si potrebbe fare una sottoclasse di cellule e quindi implementare qualunque cambiamenti nel 'touchesBegan:' metodo, e quindi rimuovere tali modifiche in 'touchesEnded:'. –

risposta

30

È necessario sottoclasse UITableViewCell e l'override del metodo:

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated 

e forse, a seconda delle esigenze:

- (void)setSelected:(BOOL)selected animated:(BOOL)animated 

e non dimenticare di chiamare super!


la documentazione di Apple:


Update (25.08.2015):

In Swift, lo farei qualcosa l ike questo:

override var highlighted: Bool { 
     get { 
      return super.highlighted 
     } 
     set { 
      if newValue { 
       backgroundColor = UIColor.redColor() 
      } 
      else { 
       backgroundColor = UIColor.blackColor() 
      } 
      super.highlighted = newValue 
     } 
    } 
-3
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 

    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 

}