Fáb*_*ira 23 objective-c ios segue
我创建了一个自定义segue,它在容器内部提供了一个与Apple自己的模态视图控制器非常相似的视图控制器(我已经将它实现为UIViewController子类).
我现在正在尝试创建一个自定义展开segue但是我无法获得-segueForUnwindingToViewController: fromViewController: identifier:要调用的方法.
我也在-viewControllerForUnwindSegueAction: fromViewController: withSender:我的容器上实现,所以我可以指向正确的视图控制器(呈现此模式的那个)但是应该被要求我的自定义展开segue的方法不会被调用到任何地方.
现在,我解除这种模式的唯一方法是在-returned:方法上做到这一点.
有没有人可以通过自定义展开segue成功完成此操作?
编辑:更多的代码和上下文
我的展开视图控制器在故事板中配置,而不是以编程方式配置.
我有这些与我的控制器中的展开segue相关的代码:
PresenterViewController.m
我在这里使用自定义方法来解除我的自定义模态(-dismissModalViewControllerWithCompletionBlock:).
- (UIStoryboardSegue *)segueForUnwindingToViewController:(UIViewController *)toViewController
fromViewController:(UIViewController *)fromViewController
identifier:(NSString *)identifier {
return [[MyModalUnwindSegue alloc] initWithIdentifier:identifier
source:fromViewController
destination:toViewController];
}
-(IBAction)returned:(UIStoryboardSegue *)segue {
if ([segue.identifier isEqualToString:@"InfoUnwindSegue"]) {
[self dismissModalViewControllerWithCompletionBlock:^{}];
}
}
Run Code Online (Sandbox Code Playgroud)
MyModalViewController.m
这里我只用-viewControllerForUnwindSegueAction: fromViewController: withSender:指向我应该放松的视图控制器.
- (UIViewController *)viewControllerForUnwindSegueAction:(SEL)action
fromViewController:(UIViewController *)fromViewController
withSender:(id)sender {
return self.myPresentingViewController;
}
Run Code Online (Sandbox Code Playgroud)
我期待的行为是调用MyModalViewController指向应该处理展开的视图控制器,然后这个视图控制器在-segueForUnwindingToViewController: fromViewController: identifier:调用之前-returned:调用了他的方法.
现在-segueForUnwindingToViewController: fromViewController: identifier:永远不会被召唤.
我还必须说我已经尝试过不同的配置.无处不在,我把我的方法用来返回它从未被调用的unwind segue.我已经读过我可以子类化导航控制器,然后它被调用,但我不知道它如何适合我的解决方案.
编辑2:附加信息
我已经检查过MyModalViewController -segueForUnwindingToViewController: fromViewController: identifier:在我想要解除它提供的常规模态视图控制器时调用了他的方法.这可能是因为他是层次结构中最顶层的UIViewController.
检查完之后,我已将UINavigationController子类化,并使用此子类来包含我的PresenterViewController.我很惊讶地注意到他的-segueForUnwindingToViewController: fromViewController: identifier:方法也被调用了.
我相信只有作为容器的视图控制器才会调用此方法.这对我来说没什么意义,因为他们不是唯一提出其他视图控制器的人,他们的孩子也在这样做.
我不能在这个子类中创建逻辑来选择要使用的segue类,因为这个类不知道他们的孩子做了什么.
苹果论坛暂时停滞不前,现在无法获得他们的支持.如果有人有任何关于如何工作的信息,请帮助!我想缺少这方面的文档是一个很好的指标,表明这仍然是多么不稳定.
Ben*_*ton 11
为了添加@Jeremy的答案,我从一个模态UIViewController展开到UINavigationController中包含的UIViewController,以便在我的UINavigationController子类中使用以下内容正常工作(即我的预期).
// Pass to the top-most UIViewController on the stack.
- (UIStoryboardSegue *)segueForUnwindingToViewController:(UIViewController *)
toViewController fromViewController:(UIViewController *)
fromViewController identifier:(NSString *)identifier {
UIViewController *controller = self.topViewController;
return [controller segueForUnwindingToViewController:toViewController
fromViewController:fromViewController
identifier:identifier];
}
Run Code Online (Sandbox Code Playgroud)
..然后像往常一样在UINavigationController内的实际ViewController中实现segueForUnwindingToViewController.
应在父控制器上声明此方法.因此,如果您正在使用具有自定义segue的导航控制器,请将UINavigationController子类化并在其上定义此方法.如果您希望在其中一个UINavigationController的子视图上定义它,您可以覆盖UINavigationController上的canPerformUnwindSegueAction:fromViewController:withSender,让它搜索子进程的处理程序.
如果您正在使用嵌入视图(容器视图),请在父视图控制器上定义它.
查看WWDC 2012 Session 407的最后10分钟 - 在您的应用程序中采用故事板以了解其工作原理!
| 归档时间: |
|
| 查看次数: |
8616 次 |
| 最近记录: |