从另一个UIViewController重新加载UITextView

时间:2013-11-29 13:44:24

标签: objective-c uiviewcontroller uitextview

我有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的变化

我做错了什么?

3 个答案:

答案 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)

您需要使用协议从B到A检索数据。

您可以查看here

here