使用Xcode中的委托来执行功能

时间:2017-07-02 22:33:11

标签: swift xcode

我有两个视图控制器,我正在使用它们自己的类。在其中一个类中,有一个功能,除其他外,改变该视图控制器中的各种视图(改变按钮的颜色等)。在第二个视图控制器中,我需要创建一个在视图控制器中执行自己的操作的函数,并调用另一个函数来调整第一个视图控制器中的视图。如何设置协议和委托以实现此目的?

2 个答案:

答案 0 :(得分:1)

我认为这不是一个非常好的架构。为什么要更改甚至看不到的视图控制器?

相反,请记住您对MVC(模型 - 视图 - 控制器)模式的了解。您需要将视图控制器的状态抽象为模型,并且每个视图控制器独立负责以自己的方式显示此数据。

因此,例如,假设您要显示“状态”,如果它是“关键”,则一个控制器中的颜色应为红色,另一个控制器应显示“关键”一词。两个控制器都可以更改此状态。在这种情况下,您需要一个保存状态的变量,并且两个控制器都能够访问和更改它。

(您可以从全局变量开始,但不要养成使用全局变量的习惯。稍后您可以探索如何使用例如Singleton模式。)

答案 1 :(得分:-1)

如果我理解正确:你有VC1(视图控制器1),它呈现VC2。当VC2处于活动状态时,它可能处于VC1内执行函数所需的状态(或对交互作出反应)。

{示例假设不需要发回任何信息。如果需要信息,请更改changedStateFrom功能

protocol ChangeStateDelegate {
    func changedStateFrom(_ viewController: UIViewController)
}

class VC1: UIViewController, ChangedStateDelegate {
    // Here is where you present VC2
    let vc = VC2()
    let vc.delegate = self

    // ChangedStateDelegate
    func changedStateFrom(_ viewController: UIViewController){
        // call whatever function in VC1 you need
    }
}

class VC2: UIViewController {
    var delegate: ChangedStateDelegate?

    func foo(){
        // Where ever VC2 reacts to a state change and needs to inform VC1, execute this
        self.delegate?.changedStateFrom(self)
    }
}