2009-07-27 6 views
1

Ich frage mich, wie ich Folgendes realisieren kann:
Erstellen einer nächsten Schaltfläche und wenn es angetippt wird die nächste UITableview Reihe ausgewählt.Drücken einer nächsten Taste für eine UITableViewcell

Da ein Bild mehr als tausend Worte sagt, habe ich einen Screenshot hinzugefügt.

http://img529.imageshack.us/img529/4341/picture5uuj.png

Wie Sie sehen unter ich eine Symbolleiste hinzugefügt, und wenn ich die richtige Taste drücken, hat er die nächste Zeile auszuwählen. Irgendwelche Vorschläge, wie ich das angehen kann (ich nehme an mit einer Art Iterator).

ps. Ich möchte, dass die Reihe auch so tut, als ob sie berührt worden wäre (so kann ich eine Handlung hinter sie setzen)

Antwort

1

So etwas sollte es tun:

- (void)selectNextRow 
{ 
    NSIndexPath *selectedRow = [self.tableView indexPathForSelectedRow]; 
    NSUInteger row = selectedRow.row; 
    NSUInteger section = selectedRow.section; 
    ++row; 
    if(row >= [self.tableView numberOfRowsInSection:selectedRow.section]) 
    { 
    row = 0; 
    ++section; 
    if(section >= [self.tableView numberOfSections]) 
    { 
     row = 0; 
     section = 0; 
    } 
    } 
    NSIndexPath *rowToSelect = [self tableView:self.tableView willSelectRowAtIndexPath:[NSIndexPath indexPathForRow:row inSection:section]]; 
    [self.tableView selectRowAtIndexPath:rowToSelect animated:YES scrollPosition:UITableViewScrollPositionMiddle]; 
    [self tableView:self.tableView didSelectRowAtIndexPath:rowToSelect]; 
    // also, post notifications if desired 
} 
+0

super thnx mann ... leider habe ich vergessen, den teil hinzuzufügen, dass die reihe sich so verhalten muss, als wäre sie angeklickt;) .. dieser code ist perfekt gemacht etwas ähnliches aber leider verhält es sich nicht wie eine berührung (für Wenn du die zweite Zeile berührst, würde es die Aktion hinter dieser Zelle bekommen) .. aber trotzdem vielen Dank –

+0

Ja, das ist das erwartete Verhalten. Aus der Dokumentation von selectRowAtIndexPath: animated: scrollPosition: "Der Aufruf dieser Methode führt nicht dazu, dass der Delegat eine tableView empfängt: willSelectRowAtIndexPath: oder tableView: didSelectRowAtIndexPath: message, noch sendet er UITableViewSelectionDidChangeNotification-Benachrichtigungen an Beobachter." Mit anderen Worten, Sie müssen diese Methoden selbst aufrufen. Ich habe den obigen Code dafür bearbeitet. – sarnesjo

+0

Ok Super Thnx ... aber ich habe einige Anpassungen vorgenommen ..alle ich brauchte, war diese [Self-Tabellenansicht: [Selbst-TableView] didSelectRowAtIndexPath: selectedRow]; aber wieder thnx –

1

Vielleicht gibt es etwas Komplexität zu Ihrer Frage, die ich vermisse, aber Sie könnten einfach die ausgewählte Reihe in verfolgen Ihr Code und, wenn Sie das Ereignis aus der Symbolleiste auf die Schaltfläche erhalten, Ihre ausgewählten Zeilenindex erhöhen und die Verwendung:

-selectRowAtIndexPath:animated:scrollPosition: 

auf dem Tisch um die Zeile auszuwählen?

+0

ok Super Dank Mann .. aber ich vergaß zu erwähnen, dass ich es möchte handeln, als ob es ausgewählt wurde, berührt;) thnx für die Antwort obwohl –

+0

Wenn Sie -tableView implementieren: didSelectCellAtIndexPath: auf die normale Weise, warum nicht nur diese Methode direkt aufrufen? Sie berechnen sowieso einen 'indexPath' für die Zeile, also rufen Sie einfach die select-Delegate-Methode auf. –

+0

Entschuldigung, es ist "tableView: didSelectRowAtIndexPath:' nicht didSelectCellAtIndexPath. Sollte überprüft haben, tut mir leid. –

1
- (IBAction)btnClicked:(id)sender 
{ 
    NSIndexPath *selectedRow = [self.MyTableview indexPathForSelectedRow]; 
    int i=selectedRow.row; 
    i++; 

    NSIndexPath* selectedCellIndexPath= [NSIndexPath indexPathForRow:i inSection:0]; 
    [MyTableview selectRowAtIndexPath:selectedCellIndexPath animated:false scrollPosition:UITableViewScrollPositionMiddle]; 
}