我试图实现的目标似乎有时间问题。
我希望实现以下内容。
- 用户到达屏幕(视图控制器(并准备"锁定"该选项
- 锁定/解锁图标位于导航栏的右上角
- 用户单击图标以锁定
- 显示UIAlert框,确认用户要锁定其选择
- 用户确认
- 用户会看到一个不同的视图,允许他们输入"PIN">
- 如果他们点击取消,则关闭PIN视图控制器,锁定状态保持为未锁定
- 如果他们单击"提交",则关闭PIN模式视图控制器
- 右上角的图标需要更改为"锁定"图标
除了图标和状态没有正确更新之外,一切似乎都在工作,因为一旦用户出现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)
}