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;
现在,调用委托部分。假设你想将SeconView
的UITextView
的文本值保存在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 中的交互器?