我正在尝试执行以下操作,但无法找到直接的答案。它与此相关: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中保留第二个View变量。但这似乎并不高效。理想情况下,我应该只在FirstView中有1个NSString文本字段。这样做的正确方法是什么?感谢
答案 0 :(得分:3)
您可以通过在Objective-C中使用Delegation来实现此目的。
在SecondView.h
添加标题后立即添加
@protocol YourDelegateName <NSObject>
-(void)setText:(NSString *)strData;
@end
还要在您的标头中添加委托属性,以便在调用类中访问它们,如下所示(这与SecondView.h
文件中的其他属性声明一致):
@property (nonatomic, weak) id<YourDelegateName> delegate;
现在,来调用委托部分。比如,当发生以下事件时,您希望在UITextView
类的SeconView
中保存strTextViewData
的{{1}}的文本值:
FirstView
现在,在- (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.
将此代码应用于您的代码可以满足您的需求。此外,委托是Objective-C语言最重要的特征之一,通过这样做,您将学习。
如果您在此实施中遇到任何问题,请与我们联系。