Hey, I'm playing around with a script my teacher provided for a table based application. However I can't seem to get my own view to load.
Files:
SubViewOneController (which is a sub view, also has a nib)
TapViewController (Custom UIView I created and want to add to a cell)
RootViewController (Main controller which loads in the views)
SimpleNavAppDelegate
How it works: Within the RootViewController, there's an NSArray that holds NSDictionary objects which is declared in the -(void)awakeFromNib {} method
- (void)awakeFromNib {
// we'll keep track of our views controllers in this array
views = [[NSMutableArray alloc] init]; // when using alloc you are responsible for it, and you will have to release it.
// ====================================================================================================
// ====================================================================================================
// LOADING IN CUSTOM VIEW HERE:
// allocate a set of views and add to our view array as a dictionary item
TapViewController *tapBoardView = [[TapViewController alloc] init];
//push onto array
[views addObject:[NSDictionary dictionaryWithObjectsAndKeys:
@"Tab Gestures", @"title",
tapBoardView, @"controller",
nil]];
[tapBoardView release]; //release the memory
// ====================================================================================================
// ====================================================================================================
SubViewOneController *subViewOneController = [[SubViewOneController alloc] init];
// This will set the 2nd level title
subViewOneController.title = @"Swipe Gestures"; //set it's title
//push it onto the array
[views addObject:[NSDictionary dictionaryWithObjectsAndKeys:
@"Swipe Gestures", @"title",
subViewOneController, @"controller",
nil]];
[subViewOneController release]; //release the memory
}
Later on I set the table view:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// OUTPUT -- see console
NSLog(@"indexPath %i", indexPath.row); // OUTPUT: tapController: <TapViewController: 0x3b2b360>
NSLog(@"view object: %@", [views objectAtIndex:indexPath.row]); // OUTPUT: view object: controller = <TapViewController: 0x3b0e290>; title = "Tab Gestures";
// ----- Hardcoding the controller and nib file in does work, so it's not a linkage issue ------
// UNCOMMENT TO SEE WORKING -- comment below section.
//TapViewController *tapContoller = [[TapViewController alloc] initWithNibName:@"TapBoardView" bundle:nil];
//NSLog(@"tapController: %@", tapContoller);
//[self.navigationController pushViewController:tapContoller animated:YES];
// ----- Random Tests -----
//UIViewController *targetViewController = [[views objectAtIndex: 0] objectForKey:@"controller"]; // DOES NOT WORK
// LOADS THE SECOND CELL (SubViewOneController) however will not load (TapViewController)
UIViewController *targetViewController = [[views objectAtIndex: indexPath.row] objectForKey:@"controller"];
NSLog(@"target: %@", targetViewController); // OUTPUT: target: <TapViewController: 0x3b0e290>
[self.navigationController pushViewController:targetViewController animated:YES];
}
Reading the comments you should be able to see that hardcoding the view in, works - however trying to load it from the View NSArray does not work. It does however contain the object in memory, seeing that NSLog proves that.
Everything is linked up and working within the TapViewController nib file. So ya, im kinda stuck on this one, any help would be great!
Thanks guys