菜鸟教程小白 发表于 2022-12-11 16:38:12

ios - UIAlert 中的 unwind segue 不起作用


                                            <p><p>如果用户需要登录才能访问某个功能,我会尝试向用户显示警报,但是当我按下警报中的登录按钮时 <code>self.self.performSegueWithIdentifier("tryonToLogin", sender:self )</code> 似乎没有做任何事情。 </p>

<p><strong>LoginViewController</strong></p>

<pre><code>@IBAction func unwindToLogin(segue:UIStoryboardSegue){

}
</code></pre>

<p><strong>UIAlert</strong></p>

<pre><code> @IBAction func goToGallery(sender: UIButton){
    if(isLoggedIn){
      performSegueWithIdentifier(&#34;ShowGallery&#34;, sender: sender)
    }else{
      showMessage(&#34;You must login to view access this feature&#34;, sender:sender)
    }
}

func showMessage(popUpMessageText : String, sender:UIButton){
    let messageTitle = &#34;Error&#34;

    print(&#34;prepreform segue&#34;)
    performSegueWithIdentifier(&#34;unwindToLogin&#34;, sender:sender)

    let refreshAlert = UIAlertController(title: messageTitle, message: popUpMessageText, preferredStyle: UIAlertControllerStyle.Alert)

    refreshAlert.addAction( UIAlertAction(title: &#34;Login&#34;, style: .Default, handler: { (action: UIAlertAction!) in
      print(&#34;Handle Login redirect logic here&#34;)
      self.performSegueWithIdentifier(&#34;unwindToLogin&#34;, sender: self)
      print(&#34;after Handle Login redirect logic here&#34;)
    }))

    refreshAlert.addAction(UIAlertAction(title: &#34;Cancel&#34;, style: .Default, handler: { (action: UIAlertAction!) in
      print(&#34;Handle Cancel logic here&#34;)
    }))


    presentViewController(refreshAlert, animated: true, completion: nil)

}

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    // Get the new view controller using segue.destinationViewController.
    // Pass the selected object to the new view controller.
    print(&#34;prepare for segue called&#34;)
    self.camera = nil
}
</code></pre>

<p>没有错误。它被调用,好像 ii 放入一个不存在的 id 我得到 no segue with specified identifier found 错误消息。
UIAlert 是否影响 <code>performSegueWithIdentifier()</code></p> 的调用

<p>下面的帖子使用了这种方法,所以我认为它应该可以工作。我错过了什么。</p>

<p>**IB 截图**</p>

<p> <a href="/image/0uaAW.png" rel="noreferrer noopener nofollow"><img src="/image/0uaAW.png" alt="screenshot 1"/></a> </p>

<p> <a href="/image/1iJw7.png" rel="noreferrer noopener nofollow"><img src="/image/1iJw7.png" alt="enter image description here"/></a> </p>

<p><strong>编辑</strong></p>

<p>我尝试移动 <code>self.performSegueWithIdentifier("unwindToLogin", sender:self)</code> 以查看确实出现了,但它仍然无法正常工作。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p> block 内的 self 是 UIAlertController,而不是 UIViewController。创建对 UIViewController 的弱引用,并调用该对象的方法。</p>

<pre><code>weak var weakSelf = self

let refreshAlert = UIAlertController(title: messageTitle, message: popUpMessageText, preferredStyle: UIAlertControllerStyle.Alert)

refreshAlert.addAction( UIAlertAction(title: &#34;Login&#34;, style: .Default, handler: { (action: UIAlertAction!) in
    print(&#34;Handle Login redirect logic here&#34;)
    dispatch_async(dispatch_get_main_queue()) {
      weakSelf?.performSegueWithIdentifier(&#34;unwindToLogin&#34;, sender:self)
    }
}))
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - UIAlert 中的 unwind segue 不起作用,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/37571817/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/37571817/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - UIAlert 中的 unwind segue 不起作用