如何使用 Material (CosmicMind) 实现开关动作

Posted

技术标签:

【中文标题】如何使用 Material (CosmicMind) 实现开关动作【英文标题】:how do implement action on switch with Material (CosmicMind) 【发布时间】:2018-11-20 16:51:27 【问题描述】:

我正在尝试在我的应用中添加一个开关。我在情节提要中添加了它(IUView 与 Switch 类和 Material 模块。我在我的视图控制器中自定义了它,但我不知道如何对其执行操作。

我尝试使用 touch up inside 事件添加 IBAction,但是当我触摸它时我什么都没有。

谢谢。

我的代码:

import Foundation
import UIKit 
import Material

class SettingsVC: UIViewController 

    @IBOutlet weak var addCalendarSwitch: Switch!

    override func viewDidLoad() 
        super.viewDidLoad()

        addCalendarSwitch.delegate = self
        addObserver()
        setStyle()
        setView()
        getStatusAddCalendar()
    

    func getStatusAddCalendar()
        if UserDefaults.standard.bool(forKey: "addToCalendar") == true 
        
            addCalendarSwitch.isOn = true
        
        else 
            addCalendarSwitch.isOn = false
        
    


extension ViewController: SwitchDelegate 

    // utilise the delegate method
    func switchDidChangeState(control: Switch, state: SwitchState) 
        print("Switch changed state to: ", .on == state ? "on" : "off")
    

hierarchy

screen of my view

【问题讨论】:

【参考方案1】:

查看示例,它似乎正在使用委托模式。 https://github.com/CosmicMind/Samples/blob/master/Projects/Programmatic/Switch/Switch/ViewController.swift

import UIKit
import Material

class ViewController: UIViewController 

    // create an outlet and connect it from your storyboard
    @IBOutlet weak var mySwitch: Switch!

    override func viewDidLoad() 
        super.viewDidLoad()
        // use this outlet to assign the delegate
        mySwitch.delegate = self
    


// conform to the protocol
extension ViewController: SwitchDelegate 

    // utilise the delegate method
    func switchDidChangeState(control: Switch, state: SwitchState) 
        print("Switch changed state to: ", .on == state ? "on" : "off")
    

【讨论】:

是的,我看到了这个,但我是新手,我不知道如何使用我在情节提要中的 switch 来做到这一点 我已经更新了示例。要从控制器中的情节提要访问开关,您需要创建一个 IBOutlet 并连接它。然后您可以分配委托并提供委托方法,如图所示。 好的,谢谢,我试过了,但首先,我必须公开函数 switchDidChangeState " 方法 'switchDidChangeState(control:state:)' 必须声明为 public,因为它符合公共协议 'SwitchDelegate 中的要求'”,如果我把 mySwitch.delegate = self,self 是我的视图控制器,我有这个错误“无法将类型 'SettingsVC' 的值分配给类型'SwitchDelegate?' " 不幸的是,没有看到您的任何代码,很难提供帮助。如果您想查看/比较您的实现,我已经创建了一个带有故事板的简单示例。 transfernow.net/279i98h0g14f 谢谢,我比较了我的代码,我认为我有同样的事情。我已经用我的代码编辑了我的查询。有了那个代码,我就有了我之前写的两个问题。

以上是关于如何使用 Material (CosmicMind) 实现开关动作的主要内容,如果未能解决你的问题,请参考以下文章

CosmicMind/Material - 如何在 NavigationDrawerController 中调用 pushViewController?

如何使用 Cosmicmind/Material TextField 将 TextField 的分隔线也放置在 LeftView 下

从 CosmicMind-Material 捕获 API:相机预览不正确

使用 Material iOS 在状态栏下方添加标签栏

Material Textfield 在设置错误文本时崩溃

CosmicMind / Graph:搜索特定的相关实体