【问题标题】:how to enable the customview controller with view after dismiss Second viewcontroller in swift如何在快速关闭第二个视图控制器后启用带有视图的自定义视图控制器
【发布时间】:2019-03-28 11:09:06
【问题描述】:

我有两个视图控制器 imag 1.第一个视图控制器是主要的,第二个是CustomAlertviw控制器 主视图控制器如上图所示,当我单击继续显示customalertview 控制器时,如image。当单击输入 pin 按钮时,我必须关闭视图控制器并在主视图控制器上显示带有 uiview 的视图控制器,但尝试过,它显示了视图控制器,还有一个自定义视图没有显示它使我的应用程序崩溃

主视图代码

    @IBAction func backButtonClicked(_ sender: UIButton) {

    let myAlert = UIStoryboard(name: "CustomAlertview", bundle: nil).instantiateViewController(withIdentifier: "CustomAlertViewController") as? CustomAlertViewController
            myAlert?.modalPresentationStyle = UIModalPresentationStyle.overCurrentContext
            myAlert?.modalTransitionStyle = UIModalTransitionStyle.crossDissolve
         self.present(myAlert!, animated: true, completion: nil)

}

Customalertview controller 
  @IBAction func enterPinButtonClick(_ sender: Any) {

       self.dismiss(animated: true, completion: nil)
        let myAlert = UIStoryboard(name: "ScanAndPay", bundle: nil).instantiateViewController(withIdentifier: "ScanAndPayDetailsEntryViewController") as? ScanAndPayDetailsEntryViewController
        myAlert?.modalPresentationStyle = UIModalPresentationStyle.overCurrentContext
        myAlert?.modalTransitionStyle = UIModalTransitionStyle.crossDissolve
        self.present(myAlert!, animated: true, completion: nil)
        myAlert.valuespass()
    }


inside main view controller one function calling from the customalrerview 

func  valuespass()
    {
        DispatchQueue.main.async {
            self.authType = 1
            self.authStatus = false
            print("this is calling")
            self.pinStatusLabel.text = "Please enter a 4-digit Security PIN"
}

当我从自定义警报视图中调用此函数时,应用程序崩溃并显示线程 1:致命错误:在展开可选值时意外发现 nil 此错误。关闭自定义视图控制器后如何显示所有信息。

【问题讨论】:

  • every preset new Controller之间添加delay
  • @AmirKhan tq 重播我可以试试!
  • 如果您仍有任何问题,请告诉我。
  • @AmirKhan 仍然是同样的问题,当我单击密码按钮时,它没有加载 pinStatusLabel.text,因为它位于我在视图控制器上的自定义视图中
  • 你在使用Delegate传递数据吗?

标签: ios swift


【解决方案1】:

你快完成了。从FirstView 呈现ScanAndPay 而不是CustomAlertview

我已经使用了Delegate,因为我认为它适合这种情况。请按照以下步骤操作 -

第 1 步:

FirstViewController 中,

添加 - CustomAlertviewDelegate 类似这样的东西 -

  class FirstViewController: UIViewController, CustomAlertviewDelegate {

现在替换您的 backButtonClicked 方法 -

  @IBAction func backButtonClicked(_ sender: UIButton) {

        let myAlert = UIStoryboard(name: "CustomAlertview", bundle: nil).instantiateViewController(withIdentifier: "CustomAlertViewController") as? CustomAlertViewController
        myAlert?.modalPresentationStyle = UIModalPresentationStyle.overCurrentContext
        myAlert?.modalTransitionStyle = UIModalTransitionStyle.crossDissolve
        myAlert.delegate = self
        self.present(myAlert!, animated: true, completion: nil)

  }

添加一个新的Delegate方法CustomAlertviewDelegate -

func ScanAndPayView(){
       DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
           let myAlert = UIStoryboard(name: "ScanAndPay", bundle: nil).instantiateViewController(withIdentifier: "ScanAndPayDetailsEntryViewController") as? ScanAndPayDetailsEntryViewController
           myAlert?.modalPresentationStyle = UIModalPresentationStyle.overCurrentContext
           myAlert?.modalTransitionStyle = UIModalTransitionStyle.crossDissolve
           self.present(myAlert!, animated: true, completion: nil)
    }
}

第 2 步:

现在是 CustomAlertview 的时候了,

为类顶部的委托添加协议 -

protocol CustomAlertviewDelegate: class {

   func ScanAndPayView()
}

class CustomAlertview: UIViewController{
  weak var delegate : CustomAlertviewDelegate!
  ...
  override func viewDidLoad() { // Rest of your code
}

现在是时候关闭当前视图控制器并通知 FirstViewController 以呈现 ScanAndPay view Controller -

@IBAction func enterPinButtonClick(_ sender: Any) {
   delegate.ScanAndPayView()
   self.dismiss(animated: true, completion: nil)

}

希望它能帮助你实现你想要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-30
    • 1970-01-01
    • 1970-01-01
    • 2017-10-20
    相关资源
    最近更新 更多