iPad issue with a modal view: modal view label null after view controller is created
- by iPhone Guy
This is a weird issue. I have created a view controller with a nib file for my modal view. On that view there is a label, number and text view. When I create the view from the source view, I tried to set the label, but it shows that the label is null (0x0). Kinda weird... Any suggestions? Now lets look at the code (I put all of the code here because that shows more than I can just explain):
The modal view controller - in IB the label is connected to the UILabel object:
@implementation ModalViewController
@synthesize delegate;
@synthesize goalLabel, goalText, goalNumber;
// Done button clicked
- (void)dismissView:(id)sender {
// Call the delegate to dismiss the modal view
if ([delegate respondsToSelector:@selector(didDismissModalView: newText:)]) {
NSNumber *tmpNum = goalNumber;
NSString *tmpString = [[NSString alloc] initWithString:[goalText text]];
[delegate didDismissModalView:tmpNum newText:tmpString];
[tmpNum release];
[tmpString release];
}
}
- (void)cancelView:(id)sender {
// Call the delegate to dismiss the modal view
if ([delegate respondsToSelector:@selector(didCancelModalView)])
[delegate didCancelModalView];
}
-(void) setLabelText:(NSString *)text {
[goalLabel setText:text];
}
/*
// The designated initializer. Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad.
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) {
// Custom initialization
}
return self;
}
*/
-(void) viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
// bring up the keyboard....
[goalText becomeFirstResponder];
}
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
[super viewDidLoad];
// set the current goal number to -1 so we know none was set
goalNumber = [NSNumber numberWithInt: -1];
// Override the right button to show a Done button
// which is used to dismiss the modal view
self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemDone
target:self
action:@selector(dismissView:)] autorelease];
// and now for the cancel button
self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemCancel
target:self
action:@selector(cancelView:)] autorelease];
self.navigationItem.title = @"Add/Update Goals";
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Overriden to allow any orientation.
return YES;
}
- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
- (void)viewDidUnload {
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (void)dealloc {
[super dealloc];
}
@end
And here is where the view controller is created, variables set, and displayed:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// put a checkmark....
UITableViewCell *tmpCell = [tableView cellForRowAtIndexPath:indexPath];
[tmpCell setAccessoryType:UITableViewCellAccessoryCheckmark];
// this is where the popup is gonna popup!
// ===> HEre We Go!
// Create the modal view controller
ModalViewController *mdvc = [[ModalViewController alloc] initWithNibName:@"ModalDetailView" bundle:nil];
// We are the delegate responsible for dismissing the modal view
[mdvc setDelegate:self];
// Create a Navigation controller
UINavigationController *navController = [[UINavigationController alloc]
initWithRootViewController:mdvc];
// set the modal view type
navController.modalPresentationStyle = UIModalPresentationFormSheet;
// set the label for all of the goals....
if (indexPath.section == 0 && indexPath.row == 0) {
[mdvc setLabelText:[[[NSString alloc] initWithString:@"Long Term Goal 1:"] autorelease]];
[mdvc setGoalNumber:[NSNumber numberWithInt:1]];
}
if (indexPath.section == 0 && indexPath.row == 1) {
[mdvc setLabelText:[[[NSString alloc] initWithString:@"Long Term Goal 2:"] autorelease]];
[mdvc setGoalNumber:[NSNumber numberWithInt:2]];
}
if (indexPath.section == 0 && indexPath.row == 2) {
[mdvc setLabelText:[[[NSString alloc] initWithString:@"Long Term Goal 3:"] autorelease]];
[mdvc setGoalNumber:[NSNumber numberWithInt:3]];
}
if (indexPath.section == 0 && indexPath.row == 3) {
[mdvc setLabelText:[[[NSString alloc] initWithString:@"Long Term Goal 4:"] autorelease]];
[mdvc setGoalNumber:[NSNumber numberWithInt:4]];
}
if (indexPath.section == 1 && indexPath.row == 0) {
[mdvc setLabelText:[[[NSString alloc] initWithString:@"Short Term Goal 1:"] autorelease]];
[mdvc setGoalNumber:[NSNumber numberWithInt:5]];
}
if (indexPath.section == 1 && indexPath.row == 1) {
[mdvc setLabelText:[[[NSString alloc] initWithString:@"Short Term Goal 2:"] autorelease]];
[mdvc setGoalNumber:[NSNumber numberWithInt:6]];
}
if (indexPath.section == 1 && indexPath.row == 2) {
[mdvc setLabelText:[[[NSString alloc] initWithString:@"Short Term Goal 3:"] autorelease]];
[mdvc setGoalNumber:[NSNumber numberWithInt:7]];
}
if (indexPath.section == 1 && indexPath.row == 3) {
[mdvc setLabelText:[[[NSString alloc] initWithString:@"Short Term Goal 4:"] autorelease]];
[mdvc setGoalNumber:[NSNumber numberWithInt:8]];
}
// show the navigation controller modally
[self presentModalViewController:navController animated:YES];
// Clean up resources
[navController release];
[mdvc release];
// ==> Ah... we are done...
}