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

Umsetzung der benutzerdefinierten Auswahlfunktion von UITableViewCell in iOS

Heute teile ich mit, wie man das Radio-Button-Design im cell anpasst, selbstgemacht, nicht wie das Bild unten, das ich im Internet gefunden habe. Ich habe lange gesucht und fast alle Artikel sind mit einem Haken markiert, daher habe ich beschlossen, einen eigenen Artikel zu schreiben. Fast jedes eigene App hat einen eigenen Stil, und wir können nicht immer auf die Methode des Hakens setzen (klingt das nicht sehr professionell?).

Wir müssen die folgende Form implementieren. Es sieht plötzlich viel besser aus, hochwertiger, oder?

Ich erkläre es Ihnen konkret. Diese Methode ist möglicherweise nicht sehr gut, und wenn großartige Meister hierherkommen, sind Sie herzlich willkommen, viele Gespräche zu führen.

Zunächst fügen Sie in Ihrem eigenen cell eine UIImageView hinzu, da Sie sicherlich zwei Bilder für ausgewählt und nicht ausgewählt haben müssen, also wird diese UIImageView verwendet, um die Bilder umzuschalten.

@property(nonatomic,strong)UIImageView *seletImage;

Hinweis: Warum wurde hier kein Button verwendet? Ich habe hauptsächlich darüber nachgedacht, dass es schlecht zu klicken ist, wenn der Button nur so groß wie ein kleiner Kreis ist. Meine Methode basiert hauptsächlich auf dem Delegate-Methode didSelectRowAtIndexPath in UITableView.

Natürlich müssen Sie diese Unterview in Ihrem eigenen cell hinzufügen und das Objekt initialisieren. Das folgende Code wird an der entsprechenden Position geschrieben.

 //Hinzufügen auf dem cell
[self.contentView addSubview:self.seletImage];
//Initialisierung
-(UIImageView *)seletImage{
if (!_seletImage) {
  _seletImage = [[UIImageView alloc]init];
}
return _seletImage;
}
//Position
[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);
 };

Wir benötigen auch einen ViewModel für die Cell, um die Veränderungen verschiedener Werte in der Cell zu verfolgen. In diesem ViewModel fügen wir einen Parameter hinzu, um zu bestimmen, ob diese Zeile der Cell geklickt wurde.

@property(nonatomic) BOOL isSelected;

Dann kehren wir in diese Cell zurück und verwenden RAC, um die Veränderungen des Parameters isSelected zu beobachten und das Bild zu ersetzen

  [[[[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"]];
  }
};

Nun, der letzte Schritt, lassen Sie uns zurückkehren zum entsprechenden ViewController dieses Cells und etwas mit dem didSelectRowAtIndexPath anstellen.

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
  [tableView deselectRowAtIndexPath:indexPath animated:YES];
 //Durchsuchen Sie das Array von viewModel, wenn der ViewModel der angeklickten Zeile übereinstimmt, wird isSelected auf Yes geändert, andernfalls auf 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];
}

Eine kurze Erklärung: Jeder Cell hat einen entsprechenden ViewModel, dieser ViewModel ist in der ViewModel-Array des ViewController platziert. Daher durchsuchen, den ViewModel der angeklickten Zeile abrufen, die Parameter ändern und das Ergebnis erreichen.

Dies ist der Abschluss dieses Artikels. Wir hoffen, dass er Ihnen bei Ihrem Lernen hilft und wir bitten Sie, die Anleitung zu unterstützen.

Erklärung: Der Inhalt dieses Artikels wurde aus dem Internet übernommen und gehört dem Urheberrechtsinhaber. Der Inhalt wurde von Internetnutzern freiwillig beigesteuert und hochgeladen. Diese Website besitzt keine Eigentumsrechte und hat den Inhalt nicht von Hand bearbeitet. Falls Sie urheberrechtlich geschützte Inhalte entdecken, freuen wir uns über eine E-Mail an: notice#w, um eine Beschwerde einzureichen.3Erklärung: Der Inhalt dieses Artikels wurde aus dem Internet übernommen und gehört dem Urheberrechtsinhaber. Der Inhalt wurde von Internetnutzern freiwillig beigesteuert und hochgeladen. Diese Website besitzt keine Eigentumsrechte und hat den Inhalt nicht von Hand bearbeitet. Falls Sie urheberrechtlich geschützte Inhalte entdecken, freuen wir uns über eine E-Mail an: notice#w, um eine Beschwerde einzureichen. Sobald die Beschwerde geprüft wird, wird der fragliche Inhalt sofort gelöscht.

Gefällt mir