将数据从一个ViewController中的某些TextField传递到另一个ViewController中的TextView

时间:2015-04-30 01:43:45

标签: ios objective-c nsuserdefaults viewcontroller

我是iOS新手。我正在为iOS工作的项目遇到一些困难。我相信这个问题应该有一个简单的解决方案,但我花了几个小时在这个网站上查看教程和其他提交,但到目前为止没有任何工作。

我的问题是我在ViewControllerS中有5个TextFields,我想从这些TextFields中获取数据,并将它们组合在ViewControllerView的TextView中。这是我的代码。

ViewControllerS.h:

#import <UIKit/UIKit.h>

@interface ViewControllerS : UIViewController

@property (weak, nonatomic) IBOutlet UITextField *txtfDay;
@property (weak, nonatomic) IBOutlet UITextField *txtfMonth;
@property (weak, nonatomic) IBOutlet UITextField *txtfName;
@property (weak, nonatomic) IBOutlet UITextField *txtfStart;
@property (weak, nonatomic) IBOutlet UITextField *txtfEnd;
@property (weak, nonatomic) IBOutlet UIButton *btnFinish;

@end

ViewControllerS.m:

#import "ViewControllerS.h"

@interface ViewControllerS ()

@end

@implementation ViewControllerS

@synthesize txtfDay;
@synthesize txtfMonth;
@synthesize txtfName;
@synthesize txtfStart;
@synthesize txtfEnd;
@synthesize btnFinish;

- (void)viewDidLoad {
    [super viewDidLoad];

}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];

}

#pragma mark - Navigation

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

}


@end

ViewControllerView.h:

#import <UIKit/UIKit.h>

@interface ViewControllerView : UIViewController

@property (weak, nonatomic) IBOutlet UITextView *txtViewFinal;

@end

ViewControllerView.m:

#import "ViewControllerView.h"

@interface ViewControllerView ()

@end

@implementation ViewControllerView

- (void)viewDidLoad {
    [super viewDidLoad];

}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];

}


#pragma mark - Navigation

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

}

@end

嗯,正如你所看到的,这基本上只是我程序的骨架。我对这段代码进行了很多修改,因为我按照教程,从这里尝试了一些想法,并听取了我的同学们的意见。到目前为止没有任何工作,但我知道这是一个简单的解决方案。我喜欢使用NSUserDefaults,但如果有人有任何其他想法,我也会尝试。同样,我只想弄清楚如何使用TextFields和TextView将数据从一个ViewController传递到另一个ViewController。

我不需要所有5个方向,而只需要1.我可以弄清楚格式化,如果我只是朝着正确的方向轻推,那么另外4个。

感谢您收到我可能收到的任何帮助!我真的很喜欢用Xcode编程,但它也非常令人沮丧。谢谢!

3 个答案:

答案 0 :(得分:1)

它没有工作,因为在创建点,你的ViewControllerView实例仍然没有加载UI组件,所以即使你直接将它传递给textView,它也会被忽略。

在ViewControllerView.h中创建一个字典,以便从ViewControllerS传递数据,如下所示:

@property (nonatomic, strong) NSDictionary *dicTextData;

并将数据设置到其中。执行此操作后,只需从ViewControllerView -(void)viewDidLoad中加载此数据,然后瞧!

<强>更新

<强> ViewControllerS.m

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    if([[segue identifier] isEqualToString:@"ViewControllerView"]) {

        ViewControllerView *destination = segue.destinationViewController;
        destination.dicTextData = @{@"day":self.txtfDay.text,
                                    @"Month":self.txtfMonth.text,
                                    @"Name":self.txtfName.text}; //and so on...
    }
}

<强> ViewControllerView.m

- (void)viewDidLoad {

    self.txtViewFinal.text = [NSString stringWithFormat:@"My name is %@", [self.dicTextData objectForKey:@"Name"]];
    //and so on... 
}

请注意,我没有使用我的示例中的所有字段,但我确定您明白了。好编码!

答案 1 :(得分:0)

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if([[segue identifier] isEqualToString:@"ViewControllerView"]){
      ViewControllerView *destination = segue.destinationViewController;
      destination.finalText = self.txtfDay.text;
}

请确保正确设置segue的标识符。

修改

谢谢@rmaddy指出问题:

对于解耦目的,这将是一种更好的方法来存储您将通过属性传递的数据,并让视图控制器处理该数据。在这种情况下,假设有一个名为NSString的{​​{1}}类型属性。 finalText方法存储了数据,现在您可以自由处理这些数据。

答案 2 :(得分:0)

有多种方法可以做到这一点。另一种方法是使用AppDelegate对象。遵循以下步骤 -

  1. 在AppDelegate.h文件中写下此行 -

    @property (nonatomic, strong) NSString *combinedText;
    
  2. 在ViewControllerViewS.m文件中导入AppDelegate文件。例如 -

    #import "AppDelegate.h"
    
  3. 在ViewControllerViewS.m的viewDidLoad中写下这一行 -

    appDelegate=(AppDelegate *)[[UIApplication sharedApplication]delegate];
    
  4. 现在在btnFinish按钮的主体中写下这一行 -

    appDelegate.combinedText=[NSString stringWithFormat:@"fDay:%@,fMonth:%@,fName:%@,fStart:%@,fEnd:%@", 
    self.txtfDay.text, self.txtfMonth.text, self.txtfName.text, self.txtfStart.text, self.txtfEnd.text];
    
  5. 现在在目标ViewController.m文件中重复步骤2和3.

  6. 现在将组合文本值分配给textView.Like -

     UITextView *textView=[[UITextView alloc]init];
     textView.text=appDelegate.combinedText;
    
  7. 让我知道它是否适合你。谢谢。