我有2个视图控制器MainDetailViewController
(MD)和MainEditViewController
(ME)
在视图加载时,MD中有一个textView,其中已有一些文本。然后我像这样打电话给我
MainEditViewController *editVC = [[MainEditViewController alloc] init];
editVC.theTextView.text = self.theTextView.text;
UINavigationController *navCon = [[UINavigationController alloc] initWithRootViewController:editVC];
[self.navigationController presentViewController:navCon animated:YES completion:nil];
我正在将TextView的文本值传递给ME,并使用presentViewController方法调用它。
在ME中,我编辑文本并单击“保存”按钮,该按钮应更新MD的textView中的文本值
MainDetailViewController *mainDetailVC = [[MainDetailViewController alloc] init];
mainDetailVC.theTextView.text = self.theTextView.text;
[self dismissViewControllerAnimated:YES completion:nil];
这并不反映MD的变化
我做错了什么?
答案 0 :(得分:0)
在您呈现视图之前不会加载视图,因此您需要创建一个属性来保存该字符串值,并且在viewDidLoad中,您应该使用字符串值设置文本字段。
答案 1 :(得分:0)
最简单的方法是使用block。 在导入之后但在@interface之前将新的block typedef添加到MainDetailViewController.h文件中:
typedef void (^ReturnBlock)(NSString *arg);
在@interface和@end之间的MainEditViewController.h文件中添加公共属性:
@property(copy) ReturnBlock returnBlock;
这是您关闭ME视图控制器时将调用的块。 接下来转到MainEditViewController.m文件并替换保存按钮中的代码:
MainDetailViewController *mainDetailVC = [[MainDetailViewController alloc] init];
mainDetailVC.theTextView.text = self.theTextView.text;
[self dismissViewControllerAnimated:YES completion:nil];
为:
if (self.returnBlock)
self.returnBlock(self.theTextView.text);
[self.navigationController popViewControllerAnimated:YES];
你应该使用popViewControllerAnimated:方法而不是dismissViewControllerAnimated。
当你创建editVC时,在你的MainDetailViewController.m文件中剩下要做的最后一个更改是,在之后添加:
editVC.theTextView.text = self.theTextView.text;
这样:
editVC.returnBlock = ^(NSString *returnText) {
NSLog(@"Returned text: %@", returnText);
self.theTextView.text = returnText;
};
快乐的编码。
答案 2 :(得分:0)