如何在快速关闭第二个视图控制器后启用带有视图的自定义视图控制器
Posted
技术标签:
【中文标题】如何在快速关闭第二个视图控制器后启用带有视图的自定义视图控制器【英文标题】: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
传递数据吗?
【参考方案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)
希望它能帮助你实现你想要的。
【讨论】:
以上是关于如何在快速关闭第二个视图控制器后启用带有视图的自定义视图控制器的主要内容,如果未能解决你的问题,请参考以下文章