可能的重复:
在视图控制器之间传递数据
我有 2 个模态视图。第一个模态视图用于编辑数量和价格;当我们单击第一个模态视图的价格文本字段时使用第二个模态视图,以便给出我们更改价格的原因,我们可以将新价格放入模态视图的价格文本字段中。当我在第二个模式视图中设置价格时,我希望第一个模式视图中的价格发生变化。如何捕捉第二个模态视图的值以放入第一个模态视图?
可能的重复:
在视图控制器之间传递数据
我有 2 个模态视图。第一个模态视图用于编辑数量和价格;当我们单击第一个模态视图的价格文本字段时使用第二个模态视图,以便给出我们更改价格的原因,我们可以将新价格放入模态视图的价格文本字段中。当我在第二个模式视图中设置价格时,我希望第一个模式视图中的价格发生变化。如何捕捉第二个模态视图的值以放入第一个模态视图?
使用NSNotification中心
您必须在First Modalview中添加观察者事件
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reload:) name:@"refresh" object:nil];
}
- (void)reload:(NSNotification *)notification {
textfield.text= [[notification userInfo] valueForKey:@"price"] ;
}
在第二个模态视图中,您必须在完成编辑后发布通知
(传递您的文本字段值)
NSDictionary *userInfo = [NSDictionary dictionaryWithObject:@"333" forKey:@"price"];
[[NSNotificationCenter defaultCenter] postNotificationName:@"refresh" object:nil userInfo:userInfo]
;
最后移除观察者
-
(void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"refresh" object:nil];
}
您可以使用Singleton来保存该类的一些数据
以下简单的步骤将使您能够做到这一点。
在第一个 Modal ViewController 中,您可以声明一个函数,如
- (void) setUpdatedValueWithValue: (NSString *) newValue
{
self.objTextField.text = newValue;
}
在头文件中也声明这个函数,以便我们可以从其他类访问它。
在第二个 Modal ViewController
SecondViewController.h
@interface SecondViewController : UIViewController
{
id objFirstViewController;
}
@property (nonatomic, retain) id objFirstViewController;
@end
第二视图控制器.m
@implementation SecondViewController
@synthesize objFirstViewController;
@end
在你提出喜欢的SecondViewController
对象之前,FirstViewController
SecondViewController
- (void) presentSecondViewController
{
SecondViewController *objSecondViewController = [[SecondViewController alloc] init];
objSecondViewController.objFirstViewController = self;
[self presentModalViewController: objSecondViewController animated: YES];
[objSecondViewController release];
objSecondViewController = nil;
}
然后,在您调用的函数中,SecondViewController
您可以在值编辑后关闭您可以执行的操作,
- (void) finishEdit
{
if([objFirstViewController respondsToSelector: @selector(setUpdatedValueWithValue:)])
{
[objFirstViewController performSelector: @selector(setUpdatedValueWithValue:) withObject: editedTextView.text];
}
[self dismissModalViewControllerAnimated: YES];
}
希望这可以帮助。
用你的关键字设置你的对象
[[NSUserDefaults standardUserDefaults]setObject:@"value of second modal view" forKey:@"keyName"];
而不是在第一个模态视图中获取该对象
NSString *name = [[NSUserDefaults standardUserDefaults]objectForKey:@"keyName"];