web-dev-qa-db-fra.com

Comment faire défiler UITableView vers une position spécifique

Comment puis-je faire défiler la cellule du tableau à une position spécifique? J'ai un tableau qui montre 3 lignes (en fonction de la hauteur). ce que je veux, c'est que si je clique sur la 1ère ligne plutôt que sur la hauteur de la table, la 1ère ligne doit défiler et obtenir une nouvelle position (centre) et la même chose pour les autres lignes. J'ai essayé contenOffset mais je n'ai pas fonctionné ..

Édité:

En bref, quelque chose comme le sélecteur de données lorsque nous sélectionnons une ligne dans le sélecteur, la ligne défile vers le centre.

Merci..

56
Maulik

enfin j'ai trouvé ... ça marchera bien quand le tableau n'affiche que 3 lignes ...

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{    
    return 1;
}


// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView 
 numberOfRowsInSection:(NSInteger)section
{  
    return 30;
}

- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil)
    {         
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault    
                                       reuseIdentifier:CellIdentifier] autorelease];
    }

    // Configure the cell.
    cell.textLabel.text =[NSString stringWithFormat:@"Hello roe no. %d",[indexPath row]];

    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell * theCell = (UITableViewCell *)[tableView     
                                              cellForRowAtIndexPath:indexPath];

    CGPoint tableViewCenter = [tableView contentOffset];
    tableViewCenter.y += myTable.frame.size.height/2;

    [tableView setContentOffset:CGPointMake(0,theCell.center.y-65) animated:YES];
    [tableView reloadData]; 
 }
16
Maulik

cela devrait fonctionner en utilisant - (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated en l’utilisant de cette façon:

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[yourTableView scrollToRowAtIndexPath:indexPath 
                     atScrollPosition:UITableViewScrollPositionTop 
                             animated:YES];

atScrollPosition pourrait prendre n'importe laquelle de ces valeurs:

typedef enum {
UITableViewScrollPositionNone,
UITableViewScrollPositionTop,
UITableViewScrollPositionMiddle,
UITableViewScrollPositionBottom
} UITableViewScrollPosition;

J'espère que ceci vous aide

À votre santé

131
Fran Sevillano
[tableview scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:NO];

Cela prendra votre table à la première ligne.

17
Praveen S

Utilisez [tableView scrollToRowAtIndexPath:indexPath atScrollPosition:scrollPosition animated:YES]; Fait défiler le récepteur jusqu'à ce qu'une ligne identifiée par le chemin d'index se trouve à un emplacement particulier de l'écran.

Et

scrollToNearestSelectedRowAtScrollPosition:animated:

Fait défiler la vue tableau pour que la ligne sélectionnée la plus proche d'une position spécifiée dans la vue tableau se trouve à cette position.

14
visakh7

Version Swift:

let indexPath:NSIndexPath = NSIndexPath(forRow: 0, inSection: 0)
self.tableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: UITableViewScrollPosition.None, animated: true)

Enum: Voici les positions de défilement tableView disponibles - ici pour référence. Vous n'avez pas besoin d'inclure cette section dans votre code.

public enum UITableViewScrollPosition : Int {

case None
case Top
case Middle
case Bottom
}

DidSelectRow:  

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

    let theCell:UITableViewCell? = tableView.cellForRowAtIndexPath(indexPath)

    if let theCell = theCell {
        var tableViewCenter:CGPoint = tableView.contentOffset
        tableViewCenter.y += tableView.frame.size.height/2

        tableView.contentOffset = CGPointMake(0, theCell.center.y-65)
        tableView.reloadData()
    }

}
8
odemolliens

Il est à noter que si vous utilisez l'approche setContentOffset, votre vue Table/Collection peut faire un léger saut. Honnêtement, j'essaierais de procéder autrement. Une recommandation est d'utiliser les méthodes de délégué de vue de défilement qui vous sont données gratuitement.

1
Stephen Paul

Simplement une seule ligne de code:

self.tblViewMessages.scrollToRow(at: IndexPath.init(row: arrayChat.count-1, section: 0), at: .bottom, animated: isAnimeted)
0
Mr.Javed Multani