ios - une - vba déselectionner tout




Comment désélectionner une cellule UITableView sélectionnée? (15)

Je travaille sur un projet sur lequel je dois présélectionner une cellule particulière.

Je peux présélectionner une cellule en utilisant -willDisplayCell , mais je ne peux pas la désélectionner lorsque l'utilisateur clique sur une autre cellule.

- (void)tableView:(UITableView*)tableView 
        willDisplayCell:(UITableViewCell*)cell
        forRowAtIndexPath:(NSIndexPath*)indexPath
{ 
    AppDelegate_iPad *appDelegte = 
      (AppDelegate_iPad *)[[UIApplication sharedApplication] delegate];

    if ([appDelegte.indexPathDelegate row] == [indexPath row])
    {
        [cell setSelected:YES];    
    } 
}

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

    AppDelegate_iPad *appDelegte = 
      (AppDelegate_iPad *)[[UIApplication sharedApplication] delegate];

    NSIndexPath *indexpath1 = appDelegte.indexPathDelegate;
    appDelegte.indexPathDelegate = indexPath;
    [materialTable deselectRowAtIndexPath:indexpath1 animated:NO];
}

Pouvez-vous aider?


Basé sur la solution de saikirans, j'ai écrit ceci, qui m'a aidé. Sur le fichier .m:

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

    if(selectedRowIndex && indexPath.row == selectedRowIndex.row) {

        [tableView deselectRowAtIndexPath:indexPath animated:YES];
        selectedRowIndex = nil;

    }

    else {  self.selectedRowIndex = [indexPath retain];   }

    [tableView beginUpdates];
    [tableView endUpdates];

}

Et sur le fichier d'en-tête:

@property (retain, nonatomic) NSIndexPath* selectedRowIndex;

Je ne suis pas très expérimenté non plus, alors vérifiez les fuites de mémoire, etc.


Cela devrait fonctionner:

[tableView deselectRowAtIndexPath:indexpath1 animated:NO];

Assurez-vous simplement que materialTable et tableView pointent vers le même objet.

Les matériaux sont-ils connectés à la tableView dans Interface Builder?


En plus de définir la cellule comme sélectionnée, vous devez également indiquer à tableView que la cellule est sélectionnée. Ajoutez un appel à -tableView:selectRowAtIndexPath:animated:scrollPosition: à votre méthode willDisplayCell: : et vous pourrez le désélectionner comme d'habitude.

- (void)tableView:(UITableView*)tableView 
  willDisplayCell:(UITableViewCell*)cell
forRowAtIndexPath:(NSIndexPath*)indexPath
{ 
    AppDelegate_iPad *appDelegte = (AppDelegate_iPad *)[[UIApplication sharedApplication] delegate];

    if ([appDelegte.indexPathDelegate row] == [indexPath row])
    {
        // SELECT CELL
        [cell setSelected:YES]; 
        // TELL TABLEVIEW THAT ROW IS SELECTED
        [tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];   
    } 
}

Veillez à utiliser UITableViewScrollPositionNone pour éviter le comportement de défilement impair.


Essaye ça:

for (NSIndexPath *indexPath in tableView.indexPathsForSelectedRows) {
    [tableView deselectRowAtIndexPath:indexPath animated:NO];
}

Pouvez-vous essayer cela?

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

    AppDelegate_iPad *appDelegte = 
    (AppDelegate_iPad *)[[UIApplication sharedApplication] delegate];
    NSIndexPath *indexpath1 = appDelegte.indexPathDelegate;
    appDelegte.indexPathDelegate = indexPath;

    UITableViewCell *prevSelectedCell = [tableView cellForRowAtIndexPath: indexpath1];
    if([prevSelectedCell isSelected]){
       [prevSelectedCell setSelected:NO];
    }
}

Cela a fonctionné pour moi.


Rapide

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    // your code

    // your code

    // and use deselect row to end line of this function

    self.tableView.deselectRowAtIndexPath(indexPath, animated: true)

}

Swift 2.0:

tableView.deselectRowAtIndexPath(indexPath, animated: true)

Swift 3

Je suis également confronté à ce problème: lorsque vous naviguez ou revenez à la vue de la table, la ligne précédemment sélectionnée n'est généralement pas désélectionnée pour vous. J'ai mis ce code dans le contrôleur de vue de tableau et ça marche bien:

override func viewDidAppear(_ animated: Bool) {
    if let lastSelectedRow = tableView.indexPathForSelectedRow {
        tableView.deselectRow(at: lastSelectedRow, animated: true)
    }
}

Swift 4:

tableView.deselectRow(at: indexPath, animated: true)

Utilisez la méthode suivante dans le tableau didSelectRowAtIndexpath du délégué de la vue de didSelectRowAtIndexpath (Ou à partir de n'importe où)

[myTable deselectRowAtIndexPath:[myTable indexPathForSelectedRow] animated:YES];

essaye ça

[self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];

utilise ce code

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
 {
    //Change the selected background view of the cell.
     [tableView deselectRowAtIndexPath:indexPath animated:YES];
 }

Swift 3.0:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    //Change the selected background view of the cell.
    tableView.deselectRow(at: indexPath, animated: true)
}

Swift 3.0:

En suivant la section de conformité au protocole du guide de style de Ray Wenderlich Swift , pour que les méthodes associées soient regroupées, placez cette extension sous la classe de votre contrôleur de vue comme ceci:

// your view controller
class MyViewcontroller: UIViewController {
  // class stuff here
}

// MARK: - UITableViewDelegate
extension MyViewcontroller: UITableViewDelegate {
      // use the UITableViewDelegate method tableView(_:didSelectRowAt:)
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        // your code when user select row at indexPath

        // at the end use deselectRow
        tableView.deselectRow(at: indexPath, animated: true)
    }
}

Swift 3/4

Dans ViewController:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    tableView.deselectRow(at: indexPath, animated: true)
}

Dans la cellule personnalisée:

override func awakeFromNib() {
    super.awakeFromNib()
    selectionStyle = .none
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    tableView.deselectRow(at: indexPath, animated: true)
}




interface-builder