我是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编程,但它也非常令人沮丧。谢谢!
答案 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对象。遵循以下步骤 -
在AppDelegate.h文件中写下此行 -
@property (nonatomic, strong) NSString *combinedText;
在ViewControllerViewS.m文件中导入AppDelegate文件。例如 -
#import "AppDelegate.h"
在ViewControllerViewS.m的viewDidLoad中写下这一行 -
appDelegate=(AppDelegate *)[[UIApplication sharedApplication]delegate];
现在在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];
现在在目标ViewController.m文件中重复步骤2和3.
现在将组合文本值分配给textView.Like -
UITextView *textView=[[UITextView alloc]init];
textView.text=appDelegate.combinedText;
让我知道它是否适合你。谢谢。