[Objective-C]另一个 UIViewController 重装的 UITextView

发布时间: 2016/9/21 5:36:05
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有 2 视图控制器 MainDetailViewController (MD) 和 MainEditViewController (我)

已有 textView MD 中带有一些文本有视图加载时。然后给我打电话这样

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 的文本值传递到我像上面,调用 presentViewController 方法。

在我我编辑的文本,单击 save 按钮,应该更新 MD 的 textView 中的文本值

MainDetailViewController *mainDetailVC = [[MainDetailViewController alloc] init];
mainDetailVC.theTextView.text = self.theTextView.text;
[self dismissViewControllerAnimated:YES completion:nil];

这不反映 MD 中的变化

我到底做错了?

解决方法 1:

做到这一点的最简单方法是使用块。 新块 typedef 添加到 MainDetailViewController.h 文件,只是后进口,但在 @interface 之前︰

typedef void (^ReturnBlock)(NSString *arg);

在 @interface 和 @end 之间的 MainEditViewController.h 文件中添加公共属性︰

@property(copy) ReturnBlock returnBlock;

这是当你丢掉你的我会叫你块视图控制器。 下一步将移动到 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。

上次更改左做是在 MainDetailViewController.m 文件中创建时 editVC,添加后︰

editVC.theTextView.text = self.theTextView.text;

这︰

editVC.returnBlock = ^(NSString *returnText) {
    NSLog(@"Returned text: %@", returnText);
    self.theTextView.text = returnText;
};

快乐的编码。

赞助商