【问题标题】: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 中的标签仍为空。想法?

【问题讨论】:

    标签: ios xcode properties uiviewcontroller


    【解决方案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 文本;

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多