如何从不同的视图控制器访问引用插座?

时间:2018-05-02 01:50:29

标签: swift uiviewcontroller

我是Swift和Xcode的新手。我正在构建一个Financial Expense ios应用程序。

在我的第一个视图控制器中,我为名为expenseNum的标签创建了一个引用插座。

在我的第二个视图控制器中,我有一个名为Add Expense的按钮的功能。单击它时,我需要它用费用金额更新expenseNum变量。

最好的方法是什么?我创建了第一个视图控制器类的对象,并像" firstviewcontroller.expenseNum"但是这将创建一个类的新实例,我需要它是所有相同的实例,因此它可以不断添加到同一个变量。谢谢您的帮助!

4 个答案:

答案 0 :(得分:0)

您需要一名代表

 protocol SendManager {
    func send(str:String)
 }

首先

class FirstVc:UIViewcontroller , SendManager {

      func send(str:string) {
        self.expenseNum.text = str
     }

}

当你呈现SecondVc

let sec = SecondVc()

sec.delegate = self

//现在

第二次

class SecondVc:UIViewcontroller {

   var delegate:SendManager?

   @IBAction func btnClicked(_ sender:UIButton) {

      delegate?.send(str:"value")

  }
}

//设置委托

在<{1}}的SecondVc

viewDidLoad

答案 1 :(得分:0)

您可以通过多种方式将数据从ViewController2传递到另一个ViewController1

这里最好的方法是协议代表

请按照以下步骤传递数据

在你想要发送数据的SecondViewController中,在类声明的顶部声明一个协议

protocol SendDataBack: class {
    func sendDataFromSecondVCtoFirstVC(myValue: String)
}

现在在class中,在同一ViewController

中声明协议的对象

weak var myDelegateObj: SendDataBack?

现在在添加费用按钮操作中,只需调用委托方法

myDelegateObj?.sendDataFromSecondVCtoFirstVC(myValue: yourValue)

现在转到第一个ViewController

你推送/呈现给SecondViewController的地方你必须把SecondVC的对象推到第一个推送

if let secondVC = (UIStoryboard.init(name: "Main", bundle: nil)).instantiateViewController(withIdentifier: "secondVCID") as? SecondViewController {
        vc?.myDelegateObj = self

 self.navigationController?.pushViewController(secondVC, animated: true) 
**OR**
        self.present(secondVC, animated: true, completion: nil)
        }
  

现在在你的FirstViewController中进行FirstViewVC的扩展

extension FirstViewController: SendDataBack {
    func sendDataFromSecondVCtoFirstVC(myValue: String) {

    }
}

答案 2 :(得分:0)

我认为您可以在第二个ViewController的属性中创建一个变量(在viewDidLoad方法之前)

var delegate: FirstViewController? = nil

并在第二个视图控制器的任何位置使用第一个视图控制器的属性。

delegate!.mainTableView.alpha=1.0
//for example access to a tableView in first view controller

答案 3 :(得分:0)

最简单的方法是使用公共变量。在您的项目中添加一个新的Swift文件,将其称为Globals。像这样声明Globals.swift中的公共变量: public var theValue: Int = 0 在第一个ViewController中设置其必需的值,您会发现您可以在第二个ViewController中轻松读取它。