it-swarm.com.de

So scrollen Sie UITableView zu einer bestimmten Position

Wie kann ich die Zelle der Tabelle zu einer bestimmten Position scrollen? Ich habe eine Tabelle, die 3 Reihen zeigt (nach Höhe). Was ich will ist, wenn ich auf die erste Zeile klicke als nach der Tabellenhöhe, sollte die erste Zeile einen Bildlauf durchführen und eine neue Position (Mitte) und dieselbe für die anderen Zeilen erhalten. Ich habe contenOffset ausprobiert, aber nicht funktioniert ..

BEARBEITET:

Kurz gesagt, etwas wie der Daten-Picker, wenn wir eine Zeile im Picker auswählen, wird die Zeile zur Mitte verschoben.

Vielen Dank..

56
Maulik

endlich habe ich gefunden ... es wird klappen wenn tabelle nur 3 reihen anzeigt ... wenn reihenfolgen entsprechend geändert werden sollen ...

- (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

es sollte funktionieren, wenn - (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated auf folgende Weise verwendet wird:

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

atScrollPosition könnte einen der folgenden Werte annehmen:

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

Ich hoffe das hilft dir

Prost

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

Dadurch wird Ihre Tabellenansicht in die erste Zeile gebracht.

17
Praveen S

Use [tableView scrollToRowAtIndexPath:indexPath atScrollPosition:scrollPosition animated:YES]; Scrollt den Empfänger, bis sich eine durch den Indexpfad identifizierte Zeile an einer bestimmten Stelle auf dem Bildschirm befindet.

Und

scrollToNearestSelectedRowAtScrollPosition:animated:

Scrollt die Tabellenansicht so, dass sich die ausgewählte Zeile, die einer angegebenen Position in der Tabellenansicht am nächsten liegt, an dieser Position befindet.

14
visakh7

Swift-Version:

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

Enum: Dies sind die verfügbaren tableView-Scrollpositionen - hier als Referenz. Sie müssen diesen Abschnitt nicht in Ihren Code aufnehmen.

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

Wenn Sie die setContentOffset-Methode verwenden, kann dies dazu führen, dass Ihre Tabellenansicht/Auflistungsansicht etwas springt. Ich würde ehrlich versuchen, einen anderen Weg zu gehen. Es wird empfohlen, die Delegiertenmethoden für die Scroll-Ansicht kostenlos zu verwenden.

1
Stephen Paul

Einfach einzelne Codezeile:

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