Je souhaite modifier le type de vue accessoire d'une cellule via la méthode: didSelectRowAtIndexPath, c'est-à-dire lorsqu'une ligne est sélectionnée, je souhaite modifier le type de vue accessoire, puis-je le faire à l'intérieur de cette méthode?
Vous pouvez obtenir la cellule à partir de la méthode didSelectRowAtIndexPath: en utilisant la méthode indexPath comme ceci.
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
In Swift 3.: Vous pouvez utiliser ces 2 façons, selon vos besoins
let cell:UITableViewCell = tableView.cellForRow(at: indexPath) as UITableViewCell
o
let cell:CustomTableViewCell = tableView.cellForRow(at: indexPath) as! CustomTableViewCell
Bon codage !!
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;
{
UITableViewCell *myCell = [tableView cellForRowAtIndexPath:indexPath];
// Access accessory View as below.
UIView * myCellAccessoryView = myCell.accessoryView;
}
Utilisez la fonction ci-dessous et passez le chemin d'index de la ligne sélectionnée afin que la cellule particulière soit rechargée à nouveau.
- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation
Autre solution: stocker l'index de ligne sélectionné et effectuer un rechargement de tableview. Puis dans cellForRowAtIndexPath
vérifiez la ligne sélectionnée et changez la vue accessoire de la cellule.
rapide
Vous pouvez obtenir la cellule à partir de la méthode didSelectRowAtIndexPath: en utilisant l'indexPath comme ceci:
let cell:UITableViewCell? = tableView.cellForRowAtIndexPath(indexPath)
Stockez le chemin d'index sélectionné. par exemple: NSInteger selectedIndexPath; puis suivez l'étape ci-dessous. définissez votre vue des accessoires.
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
AddressTableViewCell *cell=(AddressTableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
cell.backgroundColor=[UIColor lightGrayColor];
Address *addr=[self.locationArray objectAtIndex:indexPath.row];
cell.titleLabel.text = addr.addressTitle;
cell.detailLabel.text = addr.addressDetail;
if (indexPath.row == selectedIndexPath) {
[cell.selectButton setImage:[UIImage imageNamed:@"checkboxFilled"] forState:UIControlStateNormal];
}
else {
[cell.selectButton setImage:[UIImage imageNamed:@"checkbox"] forState:UIControlStateNormal];
}
return cell;
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
selectedIndexPath=indexPath.row;
[self.tableView reloadData];
}