| 

.NET C# Java Javascript Exception

5
Hallo Leute,

(Vorerst, was ich beabsichtige: Ich habe eine Tabelle die sich in einem UIView befindet, auf klick einer Zelle erscheint ein DetailViewController. In Diesem DetaiLViewController möchte ich durch die Tabelle navigieren so wie es in der MAIL-App auch gelöst ist.)

ich habe ein kleines Problem mit dem aufruf von didSelectRowAtIndexPath aus einem anderen Controller. selectRowAtIndexPath funktioniert, ich sehe, das eine andere Zelle markiert wurde, nachdem ich meine DetailView verlassen habe. Jedoch reagiert didSelectRowAtIndexPath nicht. Beim debuggen sehe ich, dass der code verarbeitet wird, jedoch ändert sich nichts in der DetailView. Hier ist mein codeschnipsel:

DashboardViewController *parent = (DashboardViewController *)self.parentViewController;

NSIndexPath *actualIndexPath = selectedRow2;
NSIndexPath * newIndexPath = [NSIndexPath indexPathForRow:actualIndexPath.row-1 inSection:actualIndexPath.section];

if([parent.view.subviews objectAtIndex:0]) {
NSLog(@"drin!");
UIView * subview = (UIView *) [parent.view.subviews objectAtIndex:0];
UITableView *tView = (UITableView *) subview;

[tView selectRowAtIndexPath:newIndexPath animated:YES scrollPosition:UITableViewScrollPositionMiddle];
[tView.delegate tableView:tView didSelectRowAtIndexPath:newIndexPath];
}


Was könnte hierbei verkehrt sein?

Danke für jede Hilfe,
brush51
28.10.2011
brush51 67 1 4
1 Antwort
1
selectRowAtIndexPath:
Calling this method does not cause the delegate to receive a tableView:willSelectRowAtIndexPath: or tableView:didSelectRowAtIndexPath: message, nor will it send UITableViewSelectionDidChangeNotification notifications to observers.


Du kannst es doch so machen wie hier vorgeschlagen (hatte ich auch schon in deiner vorangegangenen Frage gepostet): Das Öffnen der Detailansicht in eine separate Methode auslagern und dann bei der "externen Auswahl" einfach diesen Code verwenden. Ich finde du machst es unnötig kompliziert.

Drückt man eine Zelle in der Tabelle wird
1. didSelectRowAtIndexPath aufgerufen,
2. der ermittelt in der Datasource über den indexpath das objekt und
3. mit diesem wird die Detailansicht geöffnet.

Klickst du in deiner Detailansicht rufst du
1. selectRowAtIndexPath auf um die Liste optisch zu justieren und
2. dasselbe wie Punkt 2 oben (du hast ja den indexpath als argument) und
3. aktualisierst du die Detailansicht.

Ich hoffe das ist einigermassen verständlich :-)
Gruß
Daniel
28.10.2011
puls200 3,8k 7
Hallo Daniel, danke für deinen Hinweis, gestern blickte ich nicht mehr so ganz durch. ich habe nun den code ausgelagert und in eine Methode - (void) detailViewAufruf:(id) sender gepackt, diese in der didSelectRowAtIndexPath: aufgerufen: [self detailViewAufruf:indexPath]. Wenn ich es nun von der DetailView aufrufe mit: [partent detailViewAufruf:indexPath], dann bekomme ich eine exception: [UIViewController detailViewAufruf]: unrecognized selector sent to instance. Was ist hierbei verkehrt?
brush51 28.10.2011
Deine partent (parent?) referenz ist entweder null oder nicht das Objekt das du erwartest, daher kommt die Message nicht an. Füge deinem DetailViewController eine Referenz auf den ViewController mit der Liste hinzu (z.B. als Property). Dann einfach in der Detailansicht sagen: [self.listViewControllerRef detailViewAufruf.indexPath];
puls200 28.10.2011
Sorry, tippfehler, sollte parent sein. Null ist es nicht. parent ist der ViewController von der Klasse in der sich die TableView befindet. Wie meinst du das eine Referenz auf den VC mit der Liste(Tabelle?) ? Wie soll das gehen? Hier ist mein code: http://pastebin.com/xe04r67f
brush51 28.10.2011
Jup, den VC mit der Liste. Der kennt die UITableViewDataSource, mit der du deinen DetailViewController aktualisieren willst. Dieser wird wahrscheinlich dort erzeugt von daher kann man das Property doch direkt im Anschluß initialisieren. Am WE kann ich mal einen Blick in deinen Code werfen, jetzt ist zuwenig Zeit.
Gruß
Daniel
puls200 28.10.2011

Stelle deine Iphone-Frage jetzt!