如何在 ViewController 中调用所有自定义 UIView 的方法?

Posted

技术标签:

【中文标题】如何在 ViewController 中调用所有自定义 UIView 的方法?【英文标题】:How to call method of all custom UIView in a ViewController? 【发布时间】:2016-03-22 18:54:10 【问题描述】:

我创建了一个自定义 UIView,里面有一个 UIButton 当我点击它时,它会简单地改变它的背景颜色。

我想知道如何在此自定义 UIView 的所有实例中更改此按钮的背景颜色。

有什么想法吗?

import UIKit

class RadioChannelView: UIView 

    var playButton:UIButton!

    init(frame: CGRect, themeColor: UIColor) 
        super.init(frame: frame)

        playButton = UIButton(type: .Custom)
        playButton.backgroundColor = UIColor.blackColor()
        playButton.layer.cornerRadius = 40

        playButton.addTarget(self, action: "playButtonTapped", forControlEvents: .TouchUpInside)

    

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

    func playButtonTapped() 
        self.playButton.backgroundColor = UIColor.redColor()
    


【问题讨论】:

您必须遍历所有子视图并更改该按钮的背景颜色。 你可以做UIButton.appearanceWhenContainedInInstancesOfClasses([RadioChannelView.self]).backgroundColor = UIColor.redColor() 【参考方案1】:

其中一种方法是将您的RadioChannelView 类作为观察者添加到NSNotificationCenter。单击按钮时,将您的通知发布给观察者,然后它会唤醒此通知的侦听器方法,您可以在其中更改背景。

class RadioChannelView: UIView 

    var playButton:UIButton!

    init(frame: CGRect, themeColor: UIColor) 
        super.init(frame: frame)

        playButton = UIButton(type: .Custom)
        playButton.backgroundColor = UIColor.blackColor()
        playButton.layer.cornerRadius = 40

        playButton.addTarget(self, action: "playButtonTapped", forControlEvents: .TouchUpInside)

        NSNotificationCenter.defaultCenter().addObserver(self, selector: "didReceiveBtnClickNotification:", name: "button_clicked", object: nil)
    

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

    func playButtonTapped() 
        NSNotificationCenter.defaultCenter().postNotificationName("button_clicked", object: nil);
    

    func didReceiveBtnClickNotification(sender: NSNotification!) 
        self.playButton.backgroundColor = UIColor.redColor()
    

【讨论】:

以上是关于如何在 ViewController 中调用所有自定义 UIView 的方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 GameScene 中从 ViewController 调用方法

无论如何要从 Storyboard 场景创建自定义 ViewController 类文件?

UITableView didSelectRowAt indexPath 未在自定义单元格中调用

具有相同操作的所有 viewController 的通用导航栏

使用自定义 UIButton 以编程方式调用 ViewController PopOver

如何从 iOS 中的 NSObject 类导航到 ViewController?