English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Implementazione della funzione di selezione singola della cella UITableView in iOS

Oggi condivido come implementare la selezione singola del cell, personalizzata, non come quella sottolineata nella figura sottostante trovata su Internet, ho cercato a lungo, praticamente tutti gli articoli erano su come fare il cerchio croce, quindi ho deciso di scrivere un articolo da solo. Ogni app ha un proprio stile, non possiamo continuare a usare il cerchio croce (sembra un po' basso, no?).

Vogliamo realizzare il seguente tipo di forma. Sembra molto meglio, più elegante, vero?

Lasciatemi spiegare nel dettaglio. Questo metodo potrebbe non essere il migliore, ma se ci sono esperti, sono benvenuti a condividere molti suggerimenti.

Prima di tutto, aggiungi un UIImageView nel tuo cell personalizzato, perché di sicuro avrai due immagini, una per selezionata e una per non selezionata, quindi questo UIImageView viene utilizzato per commutare le immagini.

@property(nonatomic,strong)UIImageView *seletImage;

Attenzione: perché non ho usato un pulsante? Principalmente, ho pensato che se il pulsante fosse solo un piccolo cerchio, sarebbe difficile da cliccare. Il mio metodo principale è implementato attraverso il metodo di delegato didSelectRowAtIndexPath di UITableView.

Naturalmente, devi aggiungere questa sottovista nel tuo cell personale e inizializzare questo oggetto. Il codice seguente deve essere scritto nella posizione appropriata.

 //添加到cell上
[self.contentView addSubview:self.seletImage];
//初始化
-(UIImageView *)seletImage{
if (!_seletImage) {
  _seletImage = [[UIImageView alloc]init];
}
return _seletImage;
}
//Posizione coordinate
[self.seletImage mas_makeConstraints:^(MASConstraintMaker *make) {
  @strongify(self);
  make.right.equalTo(self.contentView.mas_right).with.offset(-15);
  make.centerY.equalTo(self.self.contentView);
  make.height.mas_equalTo(22);
  make.width.mas_equalTo(22);
 };

Poi abbiamo bisogno di un ViewModel per la cella per registrare le variazioni dei vari valori nella cella, in questo ViewModel aggiungiamo un parametro per determinare se questa riga di cella è stata cliccata.

@property(nonatomic)BOOL isSelected;

Poi torniamo a questa cella, dobbiamo usare RAC per osservare le variazioni del parametro isSelected, sostituendo l'immagine

  [[[RACObserve(self.viewModel, isSelected) takeUntil:self.rac_prepareForReuseSignal] deliverOnMainThread] subscribeNext:^(NSString *x){
  @strongify(self);
  if ([x boolValue]==YES) {
    [self.seletImage setImage:[UIImage imageNamed:@"alarmsetting_selected"]];
  }else{
    [self.seletImage setImage:[UIImage imageNamed:@"alarmsetting_notselected"]];
  }
};

Bene, l'ultimo passo, torniamo al ViewController corrispondente a questa cella, e lavoriamo su didSelectRowAtIndexPath.

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
  [tableView deselectRowAtIndexPath:indexPath animated:YES];
 //Scansiona l'array viewModel, se il viewModel corrispondente al numero di riga cliccata è lo stesso, imposta isSelected a Yes, altrimenti a No
  for (NSInteger i = 0; i<[self.viewModel.ItemArray count]; i++) {
    ItemViewModel *itemViewModel = self.viewModel.ItemArray[i];
    if (i!=indexPath.row) {
      itemViewModel.isSelected = NO;
    }else if (i == indexPath.row){
      itemViewModel.isSelected = YES;
    }
  }
  [self.tableView reloadData];
}

Spiego brevemente, perché ogni cella ha un ViewModel corrispondente, e questo ViewModel è posizionato nell'array ViewModel di ViewController. Pertanto, esegui una scansione, estrai il ViewModel corrispondente al numero di riga cliccata, sostituisci i parametri e realizza questo effetto.

Questo è tutto il contenuto dell'articolo, speriamo che sia utile per la tua apprendimento e che tu sostenga fortemente la guida di urlania.

Dichiarazione: il contenuto di questo articolo è stato raccolto da Internet, il copyright spetta ai rispettivi proprietari. Il contenuto è stato contribuito e caricato autonomamente dagli utenti di Internet, il sito web non detiene i diritti di proprietà, non è stato editato manualmente e non assume alcuna responsabilità legale. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare una email a: notice#oldtoolbag.com (al momento dell'invio dell'email, sostituisci # con @) per segnalare il problema e fornire prove pertinenti. Una volta verificata, il sito web eliminerà immediatamente il contenuto sospetto di violazione del copyright.

Ti potrebbe interessare