菜鸟教程小白 发表于 2022-12-12 10:06:54

ios - 容器 View Controller 无法处理 Unwind Segue Action


                                            <p><p>我在尝试使用自定义 segue 从作为子级添加到另一个 ViewController 的 ViewController 中展开时遇到问题。</p>

<p><strong>这是 MyCustomSegue.m:</strong></p>

<pre><code>- (void)perform
{
    if (_isPresenting)
    {
      //Present
      FirstVC *fromVC = self.sourceViewController;
      SecondVC *toVC = self.destinationViewController;

      toVC.view.alpha = 0;

      ;
      ;

      [UIView animateWithDuration:1.0 animations:^{

            toVC.view.alpha = 1;
            //fromVC.view.alpha = 0;

      } completion:^(BOOL finished){

            ;

      }];

    }
    else
    {
      //Dismiss
    }
}
</code></pre>

<p><strong>这是我的 FirstVC.m:</strong></p>

<pre><code>- (void)prepareForSegue:(MyCustomSegue *)segue sender:(id)sender
{
    segue.isPresenting = YES;
}

- (UIViewController *)viewControllerForUnwindSegueAction:(SEL)action fromViewController:(UIViewController *)fromViewController withSender:(id)sender
{
    return self;
}

- (UIStoryboardSegue *)segueForUnwindingToViewController:(UIViewController *)toViewController fromViewController:(UIViewController *)fromViewController identifier:(NSString *)identifier
{
    return [ initWithIdentifier:identifier source:fromViewController destination:toViewController];
}

- (IBAction)unwindToFirstVC:(UIStoryboardSegue *)segue
{
    NSLog(@&#34;I am here&#34;);
}
</code></pre>

<p>所有必要的连接也都在 Storyboard 中完成。</p>

<p>我的问题是 <code>-segueForUnwindingToViewController:</code> 从未被调用。
只要 <code>-viewControllerForUnwindSegueAction:fromViewController:withSender:</code> 返回,我的程序就会崩溃并出现以下异常:</p>

<pre><code> Terminating app due to uncaught exception &#39;NSInternalInconsistencyException&#39;, reason: &#39;Could not find a view controller to execute unwinding for &lt;FirstViewController: 0x8e8d560&gt;&#39;
</code></pre>

<p>据我了解,崩溃的原因是我希望我的容器 ViewController 成为处理 unwind segueAction 的 Controller ,这是不可能的(因为容器 ViewController 只询问它的 <strong>children</strong> 来处理 unwind segue。</p>

<p>正确吗?
我可以做些什么来解决我的问题?</p>

<p>谢谢! </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我认为你不能以这种方式使用 unwind segue(至少我找不到方法)。相反,您可以创建另一个从子 Controller 返回到父 Controller 的“正常”segue,并将其类型设置为自定义,使用与从第一个 Controller 到第二个 Controller 相同的类。在第二个 Controller 的 prepareForSegue 中,将 isPresenting 设置为 NO,并将此代码放在您的自定义 segue 中,</p>

<pre><code>- (void)perform {
    if (_isPresenting) {
      NSLog(@&#34;Presenting&#34;);
      ViewController *fromVC = self.sourceViewController;
      SecondVC *toVC = self.destinationViewController;
      toVC.view.alpha = 0;
      ;
      ;

      [UIView animateWithDuration:1.0 animations:^{

            toVC.view.alpha = 1;

      } completion:^(BOOL finished){
            ;
      }];

    }else{
      NSLog(@&#34;dismissing&#34;);
      SecondVC *fromVC = self.sourceViewController;
      ;
      [UIView animateWithDuration:1.0 animations:^{
            fromVC.view.alpha = 0;
      } completion:^(BOOL finished) {
            ;
      }];
    }
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 容器 ViewController 无法处理 Unwind Segue Action,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/23911404/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/23911404/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 容器 View Controller 无法处理 Unwind Segue Action