我正在尝试执行以下操作,但无法找到直接的答案。与此相关: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 文本字段。这样做的正确方法是什么?谢谢
最佳答案
您可以通过在 Objective-C 中使用委托(delegate)来实现这一点。
在您的 SecondView.h
中,在 Header Inclusion 之后添加以下内容
@protocol YourDelegateName <NSObject>
-(void)setText:(NSString *)strData;
@end
同时将委托(delegate)属性添加到您的 header 中,以便在调用类中访问它们,如下所示(这与 SecondView.h
文件中的其他属性声明一起使用):
@property (nonatomic, weak) id<YourDelegateName> delegate;
现在,调用委托(delegate)部分。比如说,你想将 SeconView
的 UITextView
的文本值保存在 FirstView
类的 strTextViewData
中,当下面的事件发生:
- (IBAction)save:(id)sender
{
[self.delegate setText:self.txtView.text]; // Assuming txtView is name for UITextView object
}
现在,在 FirstView.h
的委托(delegate)列表中添加 YourDelegateName
,如下所示:
@interface FisrtView : ViewController <YourDelegateName>
@property (nonatomic, reatin) NSString *strTextViewData;
@end
然后在 FisrtView.m
文件中,当您创建 SecondView
类的实例时,将委托(delegate)设置为 self
,如下所示:
SecondView *obj = [[SecondView alloc] initWithNibName:@"SeconView" bundle:nil];
obj.delegate = self; // THIS IS THE IMPORTANT PART. DON'T MISS THIS.
现在,实现委托(delegate)方法:
-(void)setText:(NSString *)strData
{
self.strTextViewData = strData;
}
将此应用到您的代码中将执行您想要的操作。此外,委托(delegate)是 Objective-C 语言最重要的特性之一,通过这样做,您将开始学习它。
如果您在实现过程中遇到任何问题,请告诉我。
关于ios 将 TextView 从 PushView 传递到 PresentingView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27451759/