将值从一个视图控制器传递到另一个视图控制器的问题

Posted

技术标签:

【中文标题】将值从一个视图控制器传递到另一个视图控制器的问题【英文标题】:Issue Passing Values From One View Controller To Another 【发布时间】:2013-01-30 18:15:06 【问题描述】:

我试图在一个视图中获取输入到 UITextFields 中的文本,并在按下按钮时将这些值传递给不同的视图控制器。在第一个视图控制器(CreateViewController)中,我有:

#import <UIKit/UIKit.h>
#import <MessageUI/MFMailComposeViewController.h>
@class ThePreviewViewController;
@interface CreateViewController : UIViewController <UIAlertViewDelegate, MFMailComposeViewControllerDelegate> 
    UIDatePicker *datePicker;
    UIDatePicker *datePicker2;
    ThePreviewViewController *_thePreview;

@property (nonatomic, retain) IBOutlet UITextField *toName;
@property (nonatomic, retain) IBOutlet UITextField *fromName;
@property (nonatomic, retain) IBOutlet UITextField *issue;
@property (nonatomic, retain) ThePreviewViewController *thePreview;
@property (nonatomic, retain) IBOutlet UITextField *expire;
@property (nonatomic, retain) IBOutlet UITextField *loveMessage;
@property (nonatomic, retain) IBOutlet UITextField *gift;
-(IBAction)build;
@end

实现文件为:

#import "ThePreviewViewController.h"
@implementation CreateViewController
@synthesize toName, fromName, gift, loveMessage, issue, expire, datePicker, datePicker2;
@synthesize thePreview = _thePreview;

-(IBAction)preview 
    if (_thePreview == nil) 
        self.thePreview = [[ThePreviewViewController alloc] initWithNibName:@"ThePreviewViewController" bundle:[NSBundle mainBundle]] ;
    
    _thePreview.issue.text = issue.text;
    _thePreview.gift.text = gift.text;
    _thePreview.expire.text = expire.text;
    [self.navigationController pushViewController:_thePreview animated:YES];





- (void)didReceiveMemoryWarning

    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.


@end

但是,在我连接所有插座后,ThePreviewViewController 中的标签仍为空。想法?

【问题讨论】:

【参考方案1】:

这似乎是由于之前已在此处讨论过的一个问题:当您实例化您的 ThePreviewViewController 时,它的 UIKit 实例尚无法设置其属性。

解决方案是在您的 ThePreviewViewController 上创建和设置 NSString 属性(或者更紧凑地使用 NSDictionary),然后在其 ViewWillAppear 事件处理程序中使用它来设置其 UIKit 元素的属性。

【讨论】:

好的,所以我将 CreateViewController 中的预览 IBAction 更改为仅推送 ThePreviewViewController,并在 viewWillAppear 中将其设置为 CreateViewController *creation = [[CreateViewController alloc]init]; gift.text = creation.gift.text; issue.text = creation.issue.text; expire.text = creation.expire.text; 但它仍然返回 null。 @user717452,您应该编辑您的问题以显示您现在使用的代码。确保显示代码 sn-ps 位于哪些方法和哪些控制器中。【参考方案2】:

您应该设置一个 NSString 属性,而不是在 ThePreview VC 中设置 UITextField 文本。这是因为 UITextField 可能尚未加载,并且 _thePreview.issue.text = issue.text 将不起作用,因为 _thePreview.issue 仍未创建.因此,在您的 ThePreview VC 中创建一个属性(例如 NSString *issueString),然后在您的 CreateViewController 中将该属性设置为 _thePreview.issueString = issue.text strong>,然后最后在您的 ThePreview VC 中使用 self.issue.text = self.issueString 在您的 viewDidLoad 方法中设置您的 textField 文本;

希望这会有所帮助。

【讨论】:

以上是关于将值从一个视图控制器传递到另一个视图控制器的问题的主要内容,如果未能解决你的问题,请参考以下文章

需要将值从我的 tableView 传递到另一个视图上的标签?

将值从表视图控制器传递到视图控制器

选择时将值从 TabBarController 传递给子视图控制器

如何将值从 tableview 传递到 collectionview

如何将值从一个片段的回收器视图项传递到另一个片段

将值从视图传递到控制器,我错过了啥?