2012-03-29 7 views
4

Ich habe festgestellt, dass scrollToRowAtIndexPath:atScrollPosition:animated: nicht zu Zelle scrollt, die derzeit nicht in Sicht sind, also wenn ich 100 Zellen habe und ich an die bei 70, den Anruf an bekomme Dieser Selektor wird nichts tun.scrollToRowAtIndexPath scrollt nicht zu inaktiven/unbelasteten Zellen

Gibt es eine Möglichkeit, diese Zelle in den Speicher zu bekommen? Ich habe bereits den Indexpfad der Zelle ...

Ich muss zu dieser Position in meiner App scrollen, wenn der Benutzer dorthin gehen möchte.

Danke für irgendwelche Gedanken!

EDIT: @dasblinkenlight

- (void)viewDidLoad 
{ 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow) name:UIKeyboardWillShowNotification object:nil]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide) name:UIKeyboardWillHideNotification object:nil]; 
} 

- (void)keyboardWillHide 
{ 
    //Load remote cell here then scroll 
    // :(dont know how to load remote cell yet 
} 

- (void)keyboardWillShow 
{ 
    //Load remote cell here then scroll 
    // :(dont know how to load remote cell yet 
    //_cellIndexPath gets assigned on didSelectRowAtIndexPath: 
    [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:_cellIndexPath.row inSection:_cellIndexPath.section] atScrollPosition:UITableViewScrollPositionBottom animated:YES]; 
} 

EDIT2:

- (void)keyboardWillShow 
{ 
//Load remote cell here then scroll 
    [NSThread detachNewThreadSelector:@selector(keyboardWillShowThreaded) toTarget:self withObject:nil]; 
} 

- (void)keyboardWillShowThreaded 
{ 
    [NSThread sleepForTimeInterval:2.0]; 
    [self performSelectorOnMainThread:@selector(keyboardWillShowMainThread) withObject:nil waitUntilDone:YES]; 
} 

- (void)keyboardWillShowMainThread 
{ 
    //Get the cell 
    //_textFieldThatHasFirstResponder is a subview in the cell 
    //This returns null, probably because the cell is not loaded into memory 
    UITableViewCell *cell = [_textFieldThatHasFirstResponder superview]; 
    NSLog(@"CELL TO SCROLL TO: %@",cell); 
    NSIndexPath *indexPathForCell = [self.tableView indexPathForCell:cell]; 
    [self.tableView scrollToRowAtIndexPath:indexPathForCell atScrollPosition:UITableViewScrollPositionMiddle animated:YES]; 
} 
+1

Es * sollte * zu einer Zelle scrollen, die sich außerhalb des sichtbaren Bereichs befindet. Können Sie zeigen, wie Sie es anrufen, und von welcher Methode machen Sie diesen Anruf? – dasblinkenlight

+0

Ja, vielleicht hast du recht, aber ich habe meine 8 Zellen sichtbar, und wenn ich zB tippe. der zweite, es scrollt gut, aber wenn ich die 8'te Zelle tappe, die teilweise außer Sichtweite ist, geschieht dies, von der Quelle gibt es viel mehr Zellen, aber nicht sichtbar, die, die unsichtbar sind, scrollen auch nicht. –

+0

Können Sie auch den Teil anzeigen, wo Sie 'scrollToRowAtIndexPath' aufrufen? – dasblinkenlight

Antwort

0

Sie einen Delegaten implementieren können, so dass Sie es von der Klasse aufrufen können, wo Sie sich befinden, so dass ist es, die Position aktualisieren

+0

Ich rufe es aus der Klasse, in der die UITableView ist (d (Die Klasse, die UITableView-Delegierte ist) –

0

„ich habe bemerkt, dass scrollToRowAtIndexPath:atScrollPosition:animated: nicht zu Zelle nicht blättern, die keine sind t derzeit in Sicht, so, wenn ich 100 Zellen habe und ich zu dem einen bei 70 zu bekommen, wird der Anruf zu diesem Selektor nichts tun. Es "

No. ist es nicht wahr. Ich habe gerade versucht, mit einem Tableview mit 100 Zeilen. Der folgende Code funktioniert gut.

[tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:78 inSection:0] 
        atScrollPosition:UITableViewScrollPositionNone animated:YES]; 
+0

Ich bekomme es jetzt auch nicht, die Schriftrolle funktioniert nur für die ersten 5 Zellen auf der Tabellenansicht ... Ich habe alle verschiedenen UITableViewScrollPositions ausprobiert. Wenn ich auf die 6+ Nummernzelle klicke Die Tastatur befindet sich direkt davor –

+0

Vielleicht ist Ihre Ladezeit ein Problem.Sehen Sie auf https://discussions.apple.com/thread/2154009?start=0&tstart=0 – Vignesh

+0

siehe EDIT2 in meinem OP, änderte den Code, um einige zu enthalten Zeit, immer noch nichts –

0

Ich glaube nicht das Hinzufügen Schlaf etwas ändert. verzögert nur die Ausführung, hat aber keinen Einfluss auf die Reihenfolge.Können Sie überprüfen, ob der Index, den Sie übergeben, an scrollToRowAtIndexPath gültig ist? Ich erinnere mich daran, das selbe Problem selbst zu sehen, aber es war mit der unsichtbaren Zelle verbunden) und daher war der Indexpfad Null und das Scrollen fehlgeschlagen Sie könnten Speicherorte aller Zellen speichern oder sie im laufenden Betrieb und dann berechnen übergeben Sie es an

- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated; 

Es ist die einzige Lösung, die ich mir vorstellen kann.

1

OK, habe ich die Ursache dafür bekam, sehen, Sie haben:

NSIndexPath *indexPathForCell = [self.tableView indexPathForCell:cell]; // nil here 
[self.tableView scrollToRowAtIndexPath:indexPathForCell atScrollPosition:UITableViewScrollPositionMiddle animated:YES]; 

Wenn Sie indexPathForCell: für eine Out-of-View-Zelle senden nil, so Tableview nicht weiß, wo scrollen zu.