【发布时间】:2014-01-12 23:55:42
【问题描述】:
我正在尝试使用 iOS 6+(我的应用程序是 7.0+)状态保留来保留从另一个视图控制器模态呈现的视图。因此,它具有典型的模态视图控制器解除模式:
TNTLoginViewController.h 包含
@protocol TNTLoginViewControllerDelegate <NSObject>
- (void)TNTLoginViewControllerDismiss:(TNTLoginViewController *)controller;
@end
@interface TNTLoginViewControllerDelegate : NSObject
@interface TNTLoginViewController : UIViewController
@property (weak, nonatomic) IBOutlet id <TNTLoginViewControllerDelegate> delegate;
- (IBAction)getStarted:(id)sender;
@end
getStarted:实现
- (IBAction)getStarted:(id)sender
{
// Perform login
...
// Dismiss me
[self.delegate TNTLoginViewControllerDismiss:self];
}
TNTLoginViewControllerDismiss:委托上的方法,呈现模态
- (void)TNTLoginViewControllerDismiss:(TNTLoginViewController *)controller
{
[self dismissViewControllerAnimated:YES completion:nil];
}
这一切都像一个魅力!直到国家保护。简单地说,我不知道 TNTLoginViewController 将如何保留它的委托。我明白为什么不能:它只是一个指针!所以我尝试了各种派生委托的方法:
- 恢复类:可悲的是,作为一个类方法,
viewControllerWithRestorationIdentifierPath:coder:并不能帮助我指向我的特定呈现视图控制器。 - 在 Storyboard 中将我的演示 VC 设置为我的模态 VC 的委托:Xcode 不允许我绘制该连接,即使我的演示 VC 的类在其标题中公开采用
TNTLogingViewControllerDelegate>协议。这可能是一个单独的问题,也可能是不允许的。 - 使用 application-delegate-level
application:viewControllerWithRestorationIdentifierPath:coder:将模态视图控制器及其委托设置返回给我的呈现视图控制器。我必须能够从 App Delegate 派生出展示的 VC,但它可能会起作用。
我现在选择#3,但如果有人可以推荐更好的解决方案,我会很高兴。
会产生类似问题的设置:
- 设置数据源,比如表格视图。
【问题讨论】:
标签: ios objective-c delegates uikit-state-preservation