Swift使用完成处理程序锁定一个控制器中的视图以反映在另一个控制器上



我试图实现的目标似乎有时间问题。

我希望实现以下内容。

  1. 用户到达屏幕(视图控制器(并准备"锁定"该选项
  2. 锁定/解锁图标位于导航栏的右上角
  3. 用户单击图标以锁定
  4. 显示UIAlert框,确认用户要锁定其选择
  5. 用户确认
  6. 用户会看到一个不同的视图,允许他们输入"PIN">
  7. 如果他们点击取消,则关闭PIN视图控制器,锁定状态保持为未锁定
  8. 如果他们单击"提交",则关闭PIN模式视图控制器
  9. 右上角的图标需要更改为"锁定"图标

除了图标和状态没有正确更新之外,一切似乎都在工作,因为一旦用户出现PIN模式视图控制器,代码就会继续执行,其中"锁定"状态保持为"解锁",因为用户没有输入PIN并点击提交,这会改变"锁定"的状态?

完成处理程序是否可以"挂起"状态,直到用户显示模式窗口,然后输入PIN,然后提交他们的PIN。。。记住,如果用户出于什么原因不想再锁定,他们也可以点击取消?

FirstViewController中,您可以在完成锁定/解锁导航项目点击时添加

func lockOrUnlock() {
let pinVC = PinViewController()
pinVC.onCompletion = { [weak self] (isPinChanged) in
//change the lock/unlock icon based on isPinChanged flag
//if true then update the status else revert the status to prev one
}
let pinVCNavController = UINavigationController(rootViewController: pinVC)
pinVCNavController.modalPresentationStyle = .currentContext
self.present(pinVCNavController, animated: true, completion: nil)
}

PinViewController中,根据用户提交或取消操作的选择,将标志值返回为true or false

var onCompletion: ((Bool) -> Void)?
override func viewDidLoad() {
super.viewDidLoad()
let cencelButton = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(cancelAction))
self.navigationItem.leftItemsSupplementBackButton = true
self.navigationItem.leftBarButtonItem = cencelButton
}
@IBAction func submitAction(_ sender: Any) {
self.onCompletion?(true)
}
func cancelAction() {
self.onCompletion?(false)
}

最新更新