| 

.NET C# Java Javascript Exception

3
Hallo Leute,

ich möchte von einem Controller namens DetailViewController auf die Tabelle eines anderen ViewControllers zugreifen.

Die Tabelle befindet sich:
-UIViewController
--UIView
--UITableView //möchte auf diese tabelle zugreifen


Aktuell versuche ich es wie folgt:
DashboardViewController *parent = (DashboardViewController *)self.parentViewController;
NSIndexPath *actualIndexPath = selectedRow2;
NSIndexPath * newIndexPath = [NSIndexPath indexPathForRow:actualIndexPath.row-1 inSection:actualIndexPath.section];

//Hier bekomme ich eine fehlermeldung,
//da 'tableViews' nicht in parent ist sondern in tieferer hierarchie
//[parent.tableViews selectRowAtIndexPath:newIndexPath animated:YES scrollPosition:UITableViewScrollPositionMiddle];


Wie kriege ich das hin?

Herlichen Dank,
brush51


Edit 1:
Danke Daniel für den Tipp, habe es jetzt so angepasst:
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];
}


Wenn ich die View wieder verlasse, sehe ich, das die nächste/vorherige zelle ausgewählt wurde, hat also geklappt. Allerdings werden in der detailView trotz didSelectRowAtIndexPath: die zur neu ausgewählten zelle zugehörigen Daten nicht angezeigt. Kurz gesagt, in der DetailView ändert sich nichts.
Was könnte hierbei verkehrt sein? An der Aktualisierung der View liegt es jedenfalls nicht, habe ich geprüft.

Vielen Dank,
brush51
News:
26.10.2011
brush51 67 1 4
1 Antwort
1
Hallo Brush51,

die gesuchte View ist dann in

parent.view.subviews

Das ist ein Array aus UIView Elementen in denen die TableView enthalten sein sollte wenn ich deinen Graph richtig interpretiere.
Aber bitte nochmal das Design überdenken! Auf die Views eines anderen Viewcontrollers zuzugreifen kann riskant sein. Bei einem MemoryWarning können die ggf. entladen werden so dass dein Zugriff ins Leere geht.

Edit:
mit
selectRowAtIndexPath:animated:scrollPosition

kann man eine Zeile programmatisch highlighten. Siehe auch die Doku dazu. Allerdings wird dabei nicht der callback didSelectRowAtIndexPath: ausgelöst was du wahrscheinlich möchtest. In diesem Posting im Nachbarforum beschreibt einer einen Workaround dazu.
Zugriff einfach via cast:

for(int i=0;i<[viewarray count];i++)
{
UIView* subview = (UIView*) [viewarray objectAtIndex:i];
if([[subview class] isKindOfClass:[UITableView class]]) { // das wird es sein?
UITableView *fernsteuerView = (UITableView *) subview;
// tue irgendwas
}
}

(das ist als Pseudocode zu verstehen, bin gerade nicht am Mac)

Falls mehrere Klassen diesen Typs enthalten sind musst du halt z.B. das Tag Property verwenden um die richtige zu finden.
26.10.2011
puls200 3,8k 7
Danke. Ja die TableView ist darin enthalten, hier ist der Log: "<UITableView: 0x604ce00; frame = (0 70; 320 390); clipsToBounds = YES; opaque = NO; autoresize = W+H; layer = [....] Doch wie greife ich denn auf selectRowAtIndexPath zu? Ich beabsichtige lediglich in einer detailview durch die tabelle aus der partenview zu navigieren(mit pfeiltasten wie in der mail app).
brush51 26.10.2011
siehe mein edit
puls200 26.10.2011
Nach ein wenig try and error kam ich weiter, vielen dank nochmal. Habe meinen Beitrag editiert, da die detailview nicht mit aktuellen daten (daten aus der neu ausgewählten zelle) gefüllt wird.
brush51 27.10.2011

Stelle deine Ios-Frage jetzt!