看来我在尝试达到的目标方面存在时间问题。
我希望实现以下目标。
除了图标和状态无法正确更新之外,所有其他功能似乎都可以正常工作,因为似乎一旦用户获得PIN模态视图控制器,代码就会继续执行,并且“ Lock”状态保持为由于用户未输入PIN并点击提交,这将更改“锁定”状态,因此“已解锁”?
完成处理程序可以将状态“挂起”直到用户显示模式窗口,然后输入PIN,然后提交其PIN ...并记住,如果用户希望不再锁定该内容,也可以单击“取消”有理由吗?
答案 0 :(得分:1)
在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)
}