IPad issue with a modal view: modal view label null after view controller is created?

Up vote 0 down vote favorite share g+ share fb share tw.

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... } iphone ipad delegates ios link|improve this question edited Aug 24 '10 at 22:48Don Jones2,76611126 asked Jun 1 '10 at 3:34iPhone Guy612415 71% accept rate.

The answer was staring me in the face! Here is what I did: Added a new function to the delegate @protocol ModalViewControllerDelegate @required - (void)didDismissModalView:(NSNumber *)goalNbr newText:(NSString *)textToSave; - (void)didCancelModalView; - (void)willShow:(id)theView; @end In the viewWillAppear function, I added the following: if (delegate respondsToSelector:@selector(willShow:)) delegate willShow:self; This allows full access to the modal view that is going to show, so we are able to change the label, text box and variables within the active modal view. - (void)willShow:(ModalViewController *)theView { theView.

GoalLabel setText:labelText; theView setGoalNumber:goalNumber; theView. GoalText setText:goalText; }.

For completeness' sake, in the event anyone else stumbles on this (it helped me)... The modal view controller's interface needs to define a variable to hold the delegate: @protocol ReminderPhotoViewDelegate @required - (void)willShow:(id)theView; @end @interface ReminderPhotoViewController : UIViewController { id delegate; UIImageView *reminderImage; UILabel *reminderLabel; } @property (assign) id delegate; @property (nonatomic, retain) IBOutlet UIImageView *reminderImage; @property (nonatomic, retain) IBOutlet UILabel *reminderLabel; @end Within the implementation of the modal controller, be sure to synthesize those properties: @implementation ReminderPhotoViewController @synthesize reminderImage, reminderLabel; @synthesize delegate; Whatever your "calling" controller is must declare support for this protocol in its own implementation: #import "ReminderPhotoViewController. H" @interface ReminderViewController : UIViewController { } Finally, when you create the instance of your modal controller, you need to set the calling class to be its delegate: ReminderPhotoViewController *photo = ReminderPhotoViewController alloc init; photo setDelegate:self; That's a more complete set of declarations and code - it's exactly what the answer shows, just with more of the supporting code. Then, as noted above, your calling controller adds the method from the protocol: - (void)willShow:(ReminderPhotoViewController *)theView { theView.reminderImage.

Image = selectedImage; theView.reminderLabel. Text = selectedText; }.

I cant really gove you an answer,but what I can give you is a way to a solution, that is you have to find the anglde that you relate to or peaks your interest. A good paper is one that people get drawn into because it reaches them ln some way.As for me WW11 to me, I think of the holocaust and the effect it had on the survivors, their families and those who stood by and did nothing until it was too late.

Related Questions