Xcode:如何使用类从主视图控制器重置所有按钮的状态

山猫

我有一个按钮类,按下时会改变颜色,在开和关之间交替。

class KSPickButton: UIButton {

    var isOn = true

    override init(frame: CGRect) {
        super.init(frame: frame)
        initButton()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        initButton()

    }

    func initButton() {
        layer.borderWidth = 2.0
        layer.borderColor = Colors.shanklinGreen.cgColor
        layer.cornerRadius = frame.size.height/2
        backgroundColor = .clear
        setTitleColor(.white, for: .normal)
        addTarget(self, action: #selector(KSPickButton.buttonPressed), for: .touchUpInside)
    }

    @objc func buttonPressed() {
        activateButton(bool: !isOn)
    }

    func activateButton(bool: Bool) {

        isOn = bool

        let color = bool ? .clear : Colors.shanklinGreen
        //let title = bool ? "" : ""
        let titleColor = bool ?  .white: Colors.shanklinBlack

        //setTitle(title, for: .normal)
        setTitleColor(titleColor, for: .normal)
        backgroundColor = color
    }
}

这完美地工作。我的主视图控制器上有 20 个按钮,它们按预期在打开和关闭之间切换......然后也许在按下 6 后,我想将它们全部重置为关闭。我的主视图控制器上有一个重置按钮,但我不知道如何将它们全部重置?

我可以让它们看起来都重置了,但 bool 保持原样......

如何为所有按钮调用此类并正确重置它们?

尼克辛迪亚

引入了一个带有“isOn”变量的观察者。您可以尝试在“KSPickButton”类中使用以下代码片段。之后,您需要从视图控制器(放置按钮的位置)获取所有子视图,并将所有子视图的“isOn”设置为“false”。

class KSPickButton: UIButton {

public var isOn:Bool = true {
didSet {
  handleButtonStateChange()
 }
}

override init(frame: CGRect) {
    super.init(frame: frame)
    initButton()
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    initButton()

}

func initButton() {
    layer.borderWidth = 2.0
    layer.borderColor = Colors.shanklinGreen.cgColor
    layer.cornerRadius = frame.size.height/2
    backgroundColor = .clear
    setTitleColor(.white, for: .normal)
    addTarget(self, action: #selector(KSPickButton.buttonPressed), for: .touchUpInside)
}

@objc func buttonPressed() {
    isOn = !isOn
}

func handleButtonStateChange() {
    let color = isOn ? .clear : Colors.shanklinGreen
    let titleColor = isOn ?  .white: Colors.shanklinBlack
    setTitleColor(titleColor, for: .normal)
    backgroundColor = color
}
}

这是您需要在视图控制器中实现的代码片段,如上所述。

class MyVC: UIViewController {
------
------

for subview in view.subviews where subview.isKind(of: KSPickButton.self)&&(subview as? KSPickButton)?.isOn == true {
  (subview as? KSPickButton)?.isOn = false
 }

-----
-----
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何获得对主视图控制器的引用?

如果在视图控制器中使用 UITabbar,如何设置主视图控制器

如何在主视图中显示来自单独类的视图作为子视图控制器?

如何从主视图控制器在详细视图控制器中推送新视图?

在主视图中按下按钮时,如何更改弹出视图控制器中标签的标签文本?

在拆分视图控制器中重新定位主视图显示按钮

如何将导航控制器添加到不是主视图的视图?

没有从主视图控制器显示情节提要

如何将值(步进器)从 UITableViewCell 解析到主视图控制器?

纵向显示时,如何以编程方式在splitViewController上显示主视图控制器?

在iOS8中使用UISplitViewController隐藏主视图控制器

使用 macOS 的 swift 委托将数据传递给主视图控制器

如何在所有视图控制器之间放置按钮并转移其状态

如何使用容器视图中的分段控件来控制主视图

如何使主视图控制器和详细视图控制器在拆分视图控制器中同时推送

iOS-拆分视图控制器-如何从主视图控制器内部获取指向详细视图控制器的指针(引用)?

从容器视图控制器调用主视图控制器

如何将数据从弹出视图控制器发送到主视图控制器。传递一个字符串,以便我可以将其作为主视图中的标签文本

如何在同一控制器内的另一个动作中返回主视图?

UISplitViewController详细视图控制器在主视图窗口中加载

将值从自定义视图传递到主视图控制器-Swift

从部分视图在主视图上发布数据,然后提交给控制器

显示/隐藏UISplitViewController的主视图控制器可移动详细视图

由于存在主视图控制器,所以拆分视图控制器的详细视图偏离中心

如何使用视图控制器重新加载TableView(Swift)

如何使用相同的 angularjs 控制器重定向视图?

将主视图控制器隐藏在iOS 6的拆分视图控制器中

是否检测到主视图控制器和局部视图控制器同时在屏幕上?

主视图控制器未在拆分视图控制器中的顶部/底部栏下方延伸