繁体   English   中英

UIAlert和View Controller的错误

[英]Bug with UIAlert and View Controller

我在iPad的iOS应用中使用默认Alert存在一个非常奇怪的错误。

在它上面有三个按钮:一个用于相机,第二个用于照片库,第三个是关闭按钮。 警报用于拾取照片。 有时候,我遇到的问题是,当我单击该警报上的关闭按钮时,将执行以下类型的代码:

let loginVC = self.storyboard?.instantiateViewController(withIdentifier: "LoginViewController") as! LoginPageViewController

我不确定这是否就是要执行的代码,但是它执行注销操作,并且用户会重定向到登录屏幕。

这是我的Alert代码

func showPopover(uiView: UIView) {
        let alertController = UIAlertController(title: nil, message: "Choose Photos", preferredStyle: .actionSheet)

        let defaultAction = UIAlertAction(title: "Camera", style: .default, handler: { (alert: UIAlertAction!) -> Void in
            self.view?.pickPhotoFromCamera()
        })

        let galleryAction = UIAlertAction(title: "Gallery", style: .default, handler: { (alert: UIAlertAction!) -> Void in
            self.view?.pickPhotoFromLibrary()
        })

        let cancelAction = UIAlertAction(title: "Cancel", style: .destructive, handler: { (alert: UIAlertAction!) -> Void in
            (self.view as? UIViewController)?.dismiss(animated: true, completion: nil)
        })

        alertController.addAction(defaultAction)
        alertController.addAction(galleryAction)
        alertController.addAction(cancelAction)

        if let popoverController = alertController.popoverPresentationController {
            popoverController.sourceView = uiView
            popoverController.sourceRect = CGRect(x: uiView.bounds.midX, y: uiView.bounds.midY, width: 0, height: 0)
            popoverController.permittedArrowDirections = []
        }
        (view as? UIViewController)?.tabBarController!.present(alertController, animated: true, completion: nil)
    }

如您所见,alert中的代码没有任何注销操作,但有时会发生这种情况。 也许有人遇到过类似的问题? 可能是什么原因呢?

如果您需要更多信息,请告诉我。 在此先感谢您的帮助!

首先,您不需要为.cancel类型的动作按钮编写任何代码即可关闭显示的警报视图控制器。 其次,您可以仅使用视图来显示警报控制器,而无需要求其父级(tabBarController)来执行。 您在.cancel按钮中的代码关闭了Login控制器本身。

import UIKit

class LoginViewController: UIViewController {

  func showPopover(uiView: UIView) {

    let alertController = UIAlertController(title: nil, message: "Choose Photos", preferredStyle: .actionSheet)


    let defaultAction = UIAlertAction(title: "Camera", style: .default, handler: { (alert: UIAlertAction!) -> Void in
      self.pickPhotoFromCamera()
    })

    let galleryAction = UIAlertAction(title: "Gallery", style: .default, handler: { (alert: UIAlertAction!) -> Void in
      self.pickPhotoFromLibrary()
    })

    let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)

    alertController.addAction(defaultAction)
    alertController.addAction(galleryAction)
    alertController.addAction(cancelAction)

    if let popoverController = alertController.popoverPresentationController {
      popoverController.sourceView = uiView
      popoverController.sourceRect = uiView.bounds
    }

    present(alertController, animated: true, completion: nil)

  }

  private func pickPhotoFromCamera() { }
  private func pickPhotoFromLibrary() { }

}

尝试

let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)

cancelAction中的问题将当前视图控制器关闭。 将其样式设置为无需处理程序即可取消。

let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM