ios 将 TextView 从 PushView 传递给 PresentingView

Posted

技术标签:

【中文标题】ios 将 TextView 从 PushView 传递给 PresentingView【英文标题】:ios Passing TextView from PushView to PresentingView 【发布时间】:2014-12-12 20:39:21 【问题描述】:

我正在尝试执行以下操作,但无法找到直接的答案。它与此有关:Passing uitextfield from one view to another。但不完全是。

我有一个 Firstview.m,我从中推送到 Secondview.m。 Secondview.m 有一个 UITextView。我允许用户在 Secondview.m 上编辑 UITextView。现在我想将此文本值存储在 Firstview.m 中的一个变量中。一种方法如下

在 Firstview.h 中

@property (nonatomic) Secondview *secondView;

即在 Firstview 本身中保留一个 secondView 变量。但这似乎效率不高。理想情况下,我应该在 FirstView 中只有 1 个 NSString 文本字段。这样做的正确方法是什么?谢谢

【问题讨论】:

【参考方案1】:

您可以通过在 Objective-C 中使用委托来实现这一点。

在您的SecondView.h 中,在标题包含之后添加以下内容

@protocol YourDelegateName <NSObject>
   -(void)setText:(NSString *)strData;
@end

还将委托属性添加到您的标题中,以便在调用类中访问它们,如下所示(这与 SecondView.h 文件中的其他属性声明一起使用):

@property (nonatomic, weak) id<YourDelegateName> delegate;

现在,调用委托部分。假设你想将SeconViewUITextView的文本值保存在FirstView类的strTextViewData中,当发生以下事件时:

- (IBAction)save:(id)sender

    [self.delegate setText:self.txtView.text]; // Assuming txtView is name for UITextView object

现在,在FirstView.h 中添加YourDelegateName 到如下委托列表中:

@interface FisrtView : ViewController <YourDelegateName>
    @property (nonatomic, reatin) NSString *strTextViewData;
@end

然后在FisrtView.m 文件中创建SecondView 类的实例时,将委托设置为self,如下所示:

SecondView *obj = [[SecondView alloc] initWithNibName:@"SeconView" bundle:nil];
obj.delegate = self; // THIS IS THE IMPORTANT PART. DON'T MISS THIS.

现在,实现委托方法:

-(void)setText:(NSString *)strData

     self.strTextViewData = strData;

将它应用到您的代码中会做您想做的事。此外,委派是 Objective-C 语言最重要的特性之一,通过这样做,您将开始学习。

如果您对此实现有任何问题,请告诉我。

【讨论】:

在答案中对 Delegate 进行一些解释会很好,因为该答案以最少的代码涵盖了该主题。 @richa 非常感谢。这种解释真的很有帮助,代表在这里学习对我来说是正确的事情。当我执行你提供的代码时,我收到以下错误。Thread 1:EXC_BAD_ACCESS(code=2, address=0x27c7ff4)我绝对不明白这是什么意思。我在这里遗漏了一些明显的东西吗?谢谢! 我的代码和你给出的唯一区别是我使用 Storyboard 实例化 SecondView,如下所示。UIStoryboard *story=[UIStoryboard storyboardWithName:@"Main" bundle:nil];SecondView *sView = [story instantiateViewControllerWithIdentifier:@"SecondView"]; 我基本上陷入了一个无限循环..试图了解出了什么问题... @user3580099 正如我在那里提到的那样。将委托设置为 self 是一个重要部分。你确定你已经正确地将代理设置为自我吗?

以上是关于ios 将 TextView 从 PushView 传递给 PresentingView的主要内容,如果未能解决你的问题,请参考以下文章

UITabBarcontroller、UITableView 和 pushView

故事板中 didselectrowatindexpath 上的 Pushview

PushView Navigation 无需重新初始化 UIViewController 中的对象

如何将 IBOutlet 值从视图传递到 VIPER iOs 中的交互器?

iOS 将 textview 值传递给 alertController.textFields。在警报控制器块中

iOS中TextView显示HTML文本