我有一个视图控制器,可以从其他几个视图控制器调用。此视图控制器包含一个UITextField,它根据视图控制器调用它来收集不同的信息。 收集后必须存储信息。为了尽可能独立,存储信息的方法应该位于调用视图控制器中。 因此,我在方法中使用以下代码来收集信息:
- (void) collectContent
{
NSString *info = [textField text];
[textField resignFirstResponder];
[[NSNotificationCenter defaultCenter] postNotificationName:@"NewValueA" object:info];
[[self navigationController] popToRootViewControllerAnimated:YES];
}
在调用视图控制器中,我的init方法中有以下行:
- (id) init
{
...
if (self)
{
...
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(storeNewValueA) name:"NewValueA" object:nil];
}
return self;
}
但是现在,我想从另一个视图控制器使用这个视图控制器来收集ValueB或ValueC。如何引用调用视图控制器来调用存储收集值的方法?我想决定,如果从vcB调用视图控制器,输入的值必须是valueB,依此类推......
答案 0 :(得分:0)
嗯,如果你想在应用程序关闭时保持这个简单的字符串,我会使用NSUserDefaults:
存储字符串:
[[NSUserDefaults standardUserDefaults] setObject:@"MyValue" ForKey:@"USER_DEFAULTS_VIEWCONTROLLER_VALUES"];
[[NSUserDefaults standardUserDefaults] synchronize];
获取字符串:
[[NSUserDefaults standardUserDefaults] objectForKey:@"USER_DEFAULTS_VIEWCONTROLLER_VALUES"];
答案 1 :(得分:0)
您可以为此常用视图控制器创建协议,并通过调用视图控制器实现此协议:
@protocol TextFieldViewControllerDelegate : NSObject {
- (void)contentCollected;
}
在文本字段(公共)视图控制器中定义委托属性:
@property (nonatomic, strong) id<TextFieldViewControllerDelegate> delegate;
调用视图控制器将自己设置为委托并实现所需的方法:
- (void) contentCollected:(NSString *)value
{
// Store the value where needed
}
在公共(文本字段)视图中,控制器在需要时通知代理:
- (void) collectContent
{
NSString *info = [textField text];
[textField resignFirstResponder];
[_delegate contentCollected:info];
[[self navigationController] popToRootViewControllerAnimated:YES];
_delegate = nil;
}
这样,您的公共视图控制器不需要知道哪个视图控制器调用它。使用委托将通知主叫视图控制器。