将数据从表视图控制器传递到选项卡视图中包含的另一个视图控制器?

时间:2016-10-30 04:07:25

标签: ios swift

所以,到目前为止,我对Swift的理解是,为了从一个视图转换到另一个视图,可以使用segues。但是,在我的应用程序中,我有一个表视图,其中显示了用户可以与之交互的项目列表,这样做会将项目移动到我的应用程序中的另一个视图控制器,包含在选项卡栏中。

class JobCompletedTableViewController: UITableViewController {

    // MARK: Properties
    var jobsCompleted = [Job]()
    var jobsChosen = [Job]()

override func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
let share = UITableViewRowAction(style: .normal, title: "Share") { action, index in
            // Add data to the array created locally
            self.jobsChosen.append(self.jobsCompleted[indexPath.row])
        }

        share.backgroundColor = UIColor.blue

        return [share]
    }
     // Need some sort of method to pass data into other view 
     //controller if tab button is clicked
}

导航控制器和标签栏视图控制器中嵌入的表视图。

class ChosenTableViewController: UITableViewController {

    // MARK: Properties
    var jobsChosen = [Job]()

    // Upon initalization of this view, this array should be populated with data passed from the above view controller
}

我对这个问题的初步想法是在视图控制器中创建一个跟踪用户与列表项交互的数组。然后将用户与之交互的项添加到数组中。当用户单击tabbar中的项目时,实例化另一个表视图控制器,该控制器显示用户与之交互的所有项目。

如果您想了解我如何实际实例化ChosenTableViewController类的实例,我将不胜感激,该实例将保存用户与之交互的所有项目列表。

故事板,了解我的应用程序的外观及其包含的内容 enter image description here

1 个答案:

答案 0 :(得分:1)

由于它们不需要持久化,因此最简单的解决方案是使用一个单例,它将所选作业保存在一个数组中,当它出现时,您可以从电子邮件VC中检索它。

final class SelectedJobs {

static let shared = SelectedJobs()

var jobsArray = [Job]()
}

然后在电子邮件VC中:

 class EmailVC: UIViewController {
    var selectedJobs = [Job]()

    override func viewWillApear(_ animated: Bool) {
    super.viewWillAppear(animated)

         for job in SelectedJobs.shared.jobsArray {
         selectedJobs.append(job)
         }

        self.tableView.reloadData()
   }

}