从其他视图控制器执行功能

时间:2018-08-14 12:38:59

标签: swift

我有以下界面:

enter image description here

在表格视图中,我为用户设置了新值,并且当按下主视图中的“完成”按钮时,我想调用该函数来更新服务器中的数据。

我该怎么做?

我尝试过:

@IBAction func doneTapped(_ sender: Any){
    ProfileEditingTableViewController().updateData()
}

但是另一个视图中的所有文本字段均为空,因为它似乎是ProfileEditingTableViewController的新实例。
updateData()不能为静态。

class ProfileEditingViewController: UIViewController {


    override func viewDidLoad() {
        super.viewDidLoad()

    }

    @IBAction func cancelButton(_ sender: Any) {
        dismiss(animated: true, completion: nil)
    }

    @IBAction func doneTapped(_ sender: Any) {
        // Here I have to save the data from the other View
        dismiss(animated: true, completion: nil)
    }

}

class ProfileEditingTableViewController: UITableViewController {

 func updateData() {
 ... 
 }
}

1 个答案:

答案 0 :(得分:0)

此行

ProfileEditingTableViewController().updateData()

不正确,因为它创建了一个新实例,您需要使用委托来访问显示的ProfileEditingTableViewController

class ProfileEditingTableViewController: UITableViewController  {

  var profileInstance: ProfileEditingViewController!

}

当您显示个人资料中的信息时:

let info = //

info.delegate = self // here self is the profile instance

然后使用:

profileInstance.updateData()

//

编辑:将segue源连接到vc本身(黄色圆形图标),位于内部(ProfileEditingViewController

self.performSegue(withIdentifier: "goToNext", sender: nil)

//

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    super.prepare(for: segue, sender: sender)
    if segue.identifier == "goToNext" {
      let des = segue.destination as! ProfileEditingTableViewController
      des.profileInstance = self
    }
}