gpt4 book ai didi

iphone - 模态视图 : modal view label null after view controller is created 的 iPad 问题

转载 作者:行者123 更新时间:2023-11-28 23:19:07 25 4
gpt4 key购买 nike

这是一个奇怪的问题。我为我的模态视图创建了一个带有 nib 文件的 View Controller 。在那个 View 上有一个标签、数字和 TextView 。当我从源 View 创建 View 时,我尝试设置标签,但它显示标签为 null (0x0)。有点奇怪...有什么建议吗?现在让我们看一下代码(我将所有代码放在这里是因为它显示的内容超出了我所能解释的范围):

模态视图 Controller - 在 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

这里是创建 View Controller 、设置变量和显示的地方:

- (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...
}

最佳答案

答案就在眼前!

这是我做的:

向委托(delegate)添加了一个新函数

@protocol ModalViewControllerDelegate <NSObject>
@required
- (void)didDismissModalView:(NSNumber *)goalNbr newText:(NSString *)textToSave;
- (void)didCancelModalView;
- (void)willShow:(id)theView;
@end

viewWillAppear 函数中,我添加了以下内容:

if ([delegate respondsToSelector:@selector(willShow:)])
[delegate willShow:self];

这允许完全访问将要显示的模态视图,因此我们能够在事件模态视图中更改标签、文本框和变量。

- (void)willShow:(ModalViewController *)theView {

[theView.goalLabel setText:labelText];
[theView setGoalNumber:goalNumber];
[theView.goalText setText:goalText];
}

关于iphone - 模态视图 : modal view label null after view controller is created 的 iPad 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2947137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com