English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Hoy comparto la implementación de la selección única de la celda, personalizada, no como la que se encuentra en la imagen inferior, que encontré en línea. Busqué mucho, y prácticamente todos los artículos eran sobre cómo hacer la marca de verificación, así que decidí escribir uno por mi cuenta. Casi todos los propios aplicaciones tienen un estilo, no podemos seguir usando la marca de verificación (parece muy poco profesional, ¿no es así?).
Lo que queremos implementar es el siguiente formato. Se ve mucho mejor, más elegante, ¿no es así?
Voy a explicarles en detalle. Este método puede no ser muy bueno, y si algún experto está aquí, es bienvenido a intercambiar muchas ideas.
Primero, agrega un UIImageView en tu celda personalizada, porque ciertamente necesitas tener dos imágenes, una para seleccionada y otra para no seleccionada, por lo que este UIImageView se utiliza para cambiar las imágenes.
@property(nonatomic,strong)UIImageView *seletImage;
Nota: ¿por qué no se usa button aquí? Principalmente consideré que si el botón solo tiene un círculo pequeño, no es fácil de hacer clic. Mi método es principalmente implementado mediante el método delegado didSelectRowAtIndexPath de UITableView.
Por supuesto, necesitas agregar este subvista en tu propia celda y inicializar este objeto. A continuación, el código se escribe en la posición correspondiente.
//Añadir a la celda [self.contentView addSubview:self.seletImage]; //inicialización -(UIImageView *)seletImage{ if (!_seletImage) { _seletImage = [[UIImageView alloc]init]; } return _seletImage; } //ubicación de coordenadas [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); };
Luego, también necesitamos un ViewModel de la celda para registrar los cambios en los valores dentro de la celda. En este ViewModel, añadimos un parámetro para determinar si esta celda de la fila fue clicada.
@property(nonatomic) BOOL isSelected;
Luego, volvemos a esta celda y utilizamos RAC para observar los cambios en el parámetro isSelected, reemplazando la imagen
[[[[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"]]; } };
Bien, el último paso, volvamos al ViewController correspondiente a esta celda y trabajemos en didSelectRowAtIndexPath.
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ [tableView deselectRowAtIndexPath:indexPath animated:YES]; //Recorrer el array de viewModel, si el viewModel correspondiente a la fila de clic es el mismo, cambiar isSelected a Yes, de lo contrario 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]; }
Explicaré brevemente, ya que cada cell tiene un ViewModel correspondiente, y este ViewModel se coloca en el array de ViewModel de ViewController. Por lo tanto, al recorrer, obtener el ViewModel correspondiente a la fila de clic, cambiar los parámetros para lograr este efecto.
Esto es todo el contenido del artículo, espero que sea útil para su aprendizaje y que todos apoyen a la tutorial de alarido.
Declaración: el contenido de este artículo se obtiene de la red, es propiedad del autor original, el contenido se contribuye y se carga por los usuarios de Internet, este sitio web no posee los derechos de propiedad, no se ha realizado una edición humana y no asume ninguna responsabilidad legal. Si encuentra contenido sospechoso de infracción de derechos de autor, por favor envíe un correo electrónico a: notice#oldtoolbag.com (al enviar un correo electrónico, reemplace # con @ para denunciar y proporcione evidencia. Si se encuentra contenido infractor, por favor envíe un correo electrónico a: notice#w