ios - Accessing a UITableView when a UINavigationController gets in the way (in a UISplitViewController) -
i have uisplitviewcontroller set so:
-(ibaction)makestory:(id)sender{ nslog(@"makestory:"); makestorytableviewcontroller = [[makestorytableviewcontroller alloc] initwithnibname:@"makestorytableviewcontroller" bundle:nil]; makesentencetableviewcontroller *detailviewcontroller = [[makesentencetableviewcontroller alloc] initwithnibname:@"makesentencetableviewcontroller" bundle:nil]; uisplitviewcontroller *splitviewcontroller = [[[uisplitviewcontroller alloc] init] autorelease]; uinavigationcontroller *rootnav = [[[uinavigationcontroller alloc] initwithrootviewcontroller:makestorytableviewcontroller]autorelease]; uinavigationcontroller *detailnav = [[[uinavigationcontroller alloc] initwithrootviewcontroller:detailviewcontroller] autorelease]; splitviewcontroller.viewcontrollers = [nsarray arraywithobjects:rootnav, detailnav, nil]; splitviewcontroller.delegate = makestorytableviewcontroller; storybotappdelegate *appdelegate = (storybotappdelegate *)[[uiapplication sharedapplication] delegate]; [appdelegate.window setrootviewcontroller:splitviewcontroller]; }
when try set detailview in uisplitview delegate result of didselectrowatindexpath:, can access navigationcontroller:
- (void)tableview:(uitableview *)tableview didselectrowatindexpath:(nsindexpath *)indexpath { nslog(@"viewcontrollers: %@", [self.splitviewcontroller viewcontrollers]); makesentencetableviewcontroller *detailviewcontroller = [[self.splitviewcontroller viewcontrollers] objectatindex:1]; story *storyset = [fetchedresultscontroller objectatindexpath:indexpath]; nslog(@"detailviewcontroller: %@", detailviewcontroller); //logs uinavigationcontroller [detailviewcontroller setstory:storyset]; //fails here because navigation controllers can't setstory! [detailviewcontroller refreshtables]; }
which makes sense, how access tableviews uinavigationcontrollers responsible for? if remove *rootnav , *detailnav , replace them uitableviews in splitviewcontroller.viewcontrollers statement works fine, have no navigation bar:
makesentencetableviewcontroller *detailviewcontroller = [[makesentencetableviewcontroller alloc] initwithnibname:@"makesentencetableviewcontroller" bundle:nil]; uisplitviewcontroller *splitviewcontroller = [[[uisplitviewcontroller alloc] init] autorelease]; //uinavigationcontroller *rootnav = [[[uinavigationcontroller alloc] initwithrootviewcontroller:makestorytableviewcontroller]autorelease]; //uinavigationcontroller *detailnav = [[[uinavigationcontroller alloc] initwithrootviewcontroller:detailviewcontroller] autorelease]; splitviewcontroller.viewcontrollers = [nsarray arraywithobjects:makestorytableviewcontroller, detailviewcontroller, nil]; splitviewcontroller.delegate = makestorytableviewcontroller; storybotappdelegate *appdelegate = (storybotappdelegate *)[[uiapplication sharedapplication] delegate]; [appdelegate.window setrootviewcontroller:splitviewcontroller];
how can access detail tableview controller , keep navigation bar?
here's how figured out. made 2 mistakes, , in mistakes had use uinavigationcontroller.viewcontrollers objectatindex: property.
in function makestory incorrectly assigning uinavigationcontroller delegate instead of makestorytableviewcontroller. fixed doing this, instead (pay special attention splitviewcontroller.delegate section):
makesentencetableviewcontroller *detailviewcontroller = [[makesentencetableviewcontroller alloc] initwithnibname:@"makesentencetableviewcontroller" bundle:nil]; uisplitviewcontroller *splitviewcontroller = [[[uisplitviewcontroller alloc] init] autorelease]; uinavigationcontroller *rootnav = [[[uinavigationcontroller alloc] initwithrootviewcontroller:makestorytableviewcontroller]autorelease]; uinavigationcontroller *detailnav = [[[uinavigationcontroller alloc] initwithrootviewcontroller:detailviewcontroller] autorelease]; splitviewcontroller.viewcontrollers = [nsarray arraywithobjects:rootnav, detailnav, nil]; //splitviewcontroller.viewcontrollers = [nsarray arraywithobjects:makestorytableviewcontroller, detailviewcontroller, nil]; //rootviewcontroller *root = (rootviewcontroller *)[navigationcontroller.viewcontrollers objectatindex:0] splitviewcontroller.delegate = [rootnav.viewcontrollers objectatindex:0]; nslog(@"delegate: %@", [rootnav.viewcontrollers objectatindex:0]); storybotappdelegate *appdelegate = (storybotappdelegate *)[[uiapplication sharedapplication] delegate]; nslog(@"rootviewcontroller: %@", appdelegate.window); [appdelegate.window setrootviewcontroller:splitviewcontroller]; nslog(@"appdelegate.window: %@", appdelegate.window.rootviewcontroller);
i made same mistake again, time in didselectrowatindexpath: , tried setstory in uinavigationcontroller. fix it, did (pay special attention bit navcontrollerdetail.viewcontrollers:
uinavigationcontroller *navcontrollerdetail; navcontrollerdetail = [[self.splitviewcontroller viewcontrollers] objectatindex:1]; makesentencetableviewcontroller *detailviewcontroller; detailviewcontroller = [navcontrollerdetail.viewcontrollers objectatindex:0]; story *storyset = [fetchedresultscontroller objectatindexpath:indexpath]; nslog(@"detailviewcontroller: %@", detailviewcontroller); [detailviewcontroller setstory:storyset]; [detailviewcontroller refreshtables];
now if figure out how splitviewcontroller rotate properly!
Comments
Post a Comment