我是Swift和Xcode的新手。我正在构建一个Financial Expense ios应用程序。
在我的第一个视图控制器中,我为名为expenseNum的标签创建了一个引用插座。
在我的第二个视图控制器中,我有一个名为Add Expense的按钮的功能。单击它时,我需要它用费用金额更新expenseNum变量。
最好的方法是什么?我创建了第一个视图控制器类的对象,并像" firstviewcontroller.expenseNum"但是这将创建一个类的新实例,我需要它是所有相同的实例,因此它可以不断添加到同一个变量。谢谢您的帮助!
答案 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中轻松读取它。