我有一个设置视图控制器,我有一个续集,这很好,在用户进入设置 VC 并在那里修改设置后,我将如何将这些设置获取到主视图控制器。有没有"其他方式"的续集?
您必须使用委托协议,此答案非常适合您的问题
委托协议
您可以使用 Unwind segue。查看以下教程以了解展开 segue。
http://chrisrisner.com/Unwinding-with-iOS-and-Storyboards
什么是 Unwind segues,您如何使用它们?
您还可以使用 NSNotificationcenter 将数据从一个视图控制器传输到另一个视图控制器。
在设置的情况下,NSUserdefaults是执行此操作的首选方法。
这里有几个选项,基本上你需要一种策略来将数据从设置视图控制器传送到主视图控制器。我宁愿独立于执行的 segue 来做。您可以:
- 使用 NSUserDefaults 保留已选择的设置。类参考。
- 使用委派技术将结果传达给应用中的另一个对象。
- 使用通知将事件/更改传播到应用中的一组对象。
- 使用您自己的模型来保持更改的持久性,如果这些更改太复杂而无法保存到用户默认值。
您也可以尝试使用块。在设置视图控制器上放置一个属性,如下所示:
@property (nonatomic, strong) void(^completionBlock)(NSDictionary *dataYouWantPassedBack);
然后在 MainViewController 的 -prepareForSegue 中设置关闭设置时要对数据发生的情况ViewController
-(void)prepareForSegue:(UIStoryboardSegue*)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"mySegueName"])
{
SettingsViewController *dest = [segue destinationViewController];
dest.completionBlock = ^(NSDictionary *dataYouWantPassedBack){
//do anything you want with the data in the dictionary here
};
}
}
在设置视图控制器中,可以将数据放入要传回的字典中,然后在关闭视图控制器之前调用完成块并传递字典。
NSDictionary *example = [NSDictionary dictionaryWithObjectsAndKeys: obj, key, nil];
if (self.completionBlock)
self.completionBlock(example);