這是一個奇怪的問題。我爲我的模態視圖創建了一個帶有nib文件的視圖控制器。在該視圖中有一個標籤,數字和文本視圖。當我從源視圖創建視圖時,我嘗試設置標籤,但它顯示標籤爲null (0x0)
。有點奇怪...有什麼建議嗎?現在讓我們看一下代碼(我把這裏所有的代碼,因爲這表明超過我可以解釋一下):iPad模式視圖問題:創建視圖控制器後的模式視圖標籤爲空
模態視圖控制器 - 在IB的標籤連接到的UILabel對象:
@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
而且這裏是視圖控制器被創建,設置的變量,並顯示:
- (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...
}