2012-05-01 8 views
15

Ho un tavoloViewCell personalizzato. Voglio indicare il tocco dell'utente evidenziando. Lo stile di selezione cella è UITableViewCellSelectionStyleBlue. Nel controller genitore ho impostato self.clearsSelectionOnViewWillAppear = YES.UITableViewCell. Come faccio a mettere in evidenza la cella durante il touch down?

Dovrei essere a posto. No. La selezione si attacca ancora alla cella. Quello che voglio è l'indicazione di selezione solo per la durata del touch down. L'aspetto dovrebbe immediatamente tornare all'aspetto non selezionato al tocco.

Come posso fare?

Cheers,
Doug

risposta

42
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 

    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 

} 
+0

Abbiamo una vittoria! Per la gente di casa la firma del metodo effettivo è deselectRowAtIndexPath: animated :. Dolce. Saluti. – dugla

+0

Non riesco a credere di spendere così tanto per capire questo problema di dolore ... Pensa che il tocco di cacao lo farà a didHighlightItemAtIndexPath in qualsiasi modo grazie a @Dancreek –

0

sovrascrivere - (void)setSelected:(BOOL)selected animate:(BOOL)animated senza chiamare super-

+0

La cella è unica selezionata dopo il ritocco, la domanda vuole cambiare il colore al tocco. – Zorayr

-3

ho avuto lo stesso codice issue.The seguito perfettamente funzionato per me.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 

[[tableView cellForRowAtIndexPath:indexPath] setBackgroundColor:[UIColor blueColor]]; 
[table reloadData]; 
} 
+2

Vuoi veramente ricaricare la tabella su ogni evento touch? È assolutamente sbagliato il modo di fare soggetto. – surfrider

+0

Trasforma la cella in blu, ma rimane così e funziona solo su touchUpInside. Che dire solo del down down? –

+0

La cella viene contrassegnata selezionata solo dopo il ritocco: la domanda vuole cambiare il colore al tocco in basso; inoltre, sono d'accordo con @surfrider, perché dovresti ricaricare i dati? – Zorayr

0

Questo funziona:

Ottiene il backgroundview con bordo della cella cercando come seperator.Do non modificare le impostazioni predefinite in Tableview interfaccia builder.Make sicuro UITableViewCellSelectionStyleNone non è impostato su selectionstyle. Sto incollando il codice funzionante. :

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
static NSString *kCellIdentifier = @"PlayListCell"; 
UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:kCellIdentifier]; 
if (cell == nil) { 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:kCellIdentifier]; 
} 
MPMediaPlaylist *playList = [playlistCollection objectAtIndex:indexPath.row]; 
cell.textLabel.text = playList.name; 
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
// cell.selectionStyle = UITableViewCellSelectionStyleNone; 
cell.detailTextLabel.text = [NSString stringWithFormat:@"%d Songs",[playList.items count]]; 
MPMediaItemCollection *playListMediaCollection = [playlistCollection objectAtIndex:indexPath.row ]; 

cell.imageView.image =[UIImage imageWithCGImage:[self getImageForCollection:playListMediaCollection.items]]; 

// the main code which make it highlight 

UIView *bgColorView = [[UIView alloc] init]; 
bgColorView.backgroundColor = [UIColor colorWithRed:170.0f/255.0 green:170.0f/255.0 blue:170.0f/255.0 alpha:1.0f]; 
[bgColorView.layer setBorderColor:[UIColor blackColor].CGColor]; 
[bgColorView.layer setBorderWidth:1.0f]; 
[cell setSelectedBackgroundView:bgColorView]; 


return cell; 

}

9

Sotto esempio Swift utilizza didHighlightRowAtIndexPath per cambiare il colore di sfondo della cella sul touch down e didUnhighlightRowAtIndexPath per ripristinare il colore - vedi sotto:

// MARK: UITableViewDelegate 

func tableView(tableView: UITableView, didHighlightRowAtIndexPath indexPath: NSIndexPath) { 
    if let cell = tableView.cellForRowAtIndexPath(indexPath) { 
    cell.backgroundColor = UIColor.greenColor() 
    } 
} 

func tableView(tableView: UITableView, didUnhighlightRowAtIndexPath indexPath: NSIndexPath) { 
    if let cell = tableView.cellForRowAtIndexPath(indexPath) { 
    cell.backgroundColor = UIColor.blackColor() 
    } 
} 
+0

questo non funziona. Il colore non viene ripristinato al tocco –

+0

Puoi inserire un punto di interruzione in 'didUnhighlightRowAtIndexPath:' e confermare che è stato chiamato al tocco? Se puoi confermarlo, il prossimo colpevole potrebbe essere la tua logica che cambia colore. – Zorayr

+0

scusate, ho capito che il mio problema era che avevo selezionato "ritardi nei contenuti" selezionati nello storyboard. –

Problemi correlati