当我的开关行的行值发生变化时,如何启用/禁用我的模式?

Posted

技术标签:

【中文标题】当我的开关行的行值发生变化时,如何启用/禁用我的模式?【英文标题】:How can I enable/disable my modal when the row value of my switch row changes? 【发布时间】:2020-08-31 07:05:38 【问题描述】:

我想根据我的开关行的当前值激活/停用我的模式。

我有一个 SettingsViewController,用户可以在其中启用或禁用它:

class SettingsFormViewController : FormViewController, MFMailComposeViewControllerDelegate 
    override func viewDidLoad() 
        super.viewDidLoad()
        
        form 
            +++ Section("Messages")
            <<< SwitchRow("message_users")  row in
                row.title = "Activate messages"
            .onChange  row in
                row.title = (row.value ?? false) ? "Deactivate messages" : "Activate messages"
                row.updateCell()
            
            

现在在我的 ReloadManager 中,我想检查该行是否启用。如果启用,则应显示模态框,否则不应显示:


class ReloadManager 

...

private func showModalFromSettings() 

             let nav = UINavigationController()
             let ctrl = MessageFormViewController()
                 
             ctrl.preferredContentSize = CGSize(width: 600, height: 400)
             nav.pushViewController(ctrl, animated: true)
             nav.modalPresentationStyle = .popover
               
             UIApplication.shared.keyWindow?.rootViewController!.present(nav, animated: true, completion: nil)
             nav.popoverPresentationController?.sourceView = UIApplication.shared.keyWindow?.rootViewController?.view
             
    

检查行是否启用然后将值传递给我的 ReloadManager 的最佳方法是什么? 提前致谢!

【问题讨论】:

【参考方案1】:

您可以使用 UserDefaults 来保存行的状态。

 +++ Section("Messages")
                <<< SwitchRow("message_users")  row in
                    row.title = "Activate messages"
                .onChange  row in
                    row.title = (row.value ?? false) ? "Deactivate messages" : "Activate 
messages"
                    row.updateCell()
                    UserDefaults.standard.set(row.value ?? false, forKey: "RowStatus")
                

private func showModalFromSettings() 
             let rowStatus = UserDefaults.standard.bool(forKey: "RowStatus")
             if rowStatus 
                  //Do something when row enabled
              else 
                 //Do something when row disabled
             
             let nav = UINavigationController()
             let ctrl = MessageFormViewController()
                 
             ctrl.preferredContentSize = CGSize(width: 600, height: 400)
             nav.pushViewController(ctrl, animated: true)
             nav.modalPresentationStyle = .popover
               
             UIApplication.shared.keyWindow?.rootViewController!.present(nav, animated: true, completion: nil)
             nav.popoverPresentationController?.sourceView = UIApplication.shared.keyWindow?.rootViewController?.view
             
    

【讨论】:

以上是关于当我的开关行的行值发生变化时,如何启用/禁用我的模式?的主要内容,如果未能解决你的问题,请参考以下文章

切换开关 - 当我启用另一个按钮时禁用一个按钮

为啥调用 location.reload(); 后我的表中的行顺序会发生变化?关闭模态框时

使用开关启用和禁用本地通知(swift 3)

动态生成列名时如何获取kendo选择的行值

使用javascript在gridview中获取复选框选中行的相应行值

如何启用基于脏网格记录的按钮