tableview到tableview协议代表

时间:2018-01-22 06:08:11

标签: swift delegates tableview segue protocols

我正在尝试完成这个表单的应用程序。一旦填写完一个按钮,将被推送打印。第一个控制器有一个tableview,其中包含第1页第2页第3页。第1页打开,您将填写所有信息。当命中保存它应该带你回到第一个控制器。然后当你按下print打开tableview并加载所有信息。 我正在努力正确使用结构。也在努力使用保存按钮到代理人的打印控制器页面。

enter image description here

我的页面控制器代码

class PagesController: UIViewController, UITableViewDelegate {

    var pages = ["Page 1","Page 2","Page 3"]

    @IBOutlet weak var pagesTableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()

        pagesTableView.delegate = self
        pagesTableView.dataSource = self

    }

    @IBAction func printBtnPressed(_ sender: Any) {

    } }

extension PagesController: UITableViewDataSource {
    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return pages.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "PagesCell")

        cell?.textLabel?.text = pages[indexPath.row]

        return cell!
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        if indexPath.row == 0 {
            performSegue(withIdentifier: "ChildInfoSegue", sender: self)
        }
    }

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 90.0
    }
     }

继承我的表单控制器

protocol ChildDelegate {
    func saveInfoBlock(form: ChildInfo)
}

class ChildInfoTableViewController: UITableViewController {

    var formDelegate: ChildDelegate!

    var firstNameText: UITextField = UITextField()
    var lastNameText: UITextField = UITextField()
    var middleNameText: UITextField = UITextField()

    //MARK: From ChildInfo.swift STRUCT
    var childInfo = [ChildInfo]()

    var basicChildInfo = ["Child's First Name","Child's Middle Name","Child's Last Name"]

    override func viewDidLoad() {
        super.viewDidLoad()


    }

    override func numberOfSections(in tableView: UITableView) -> Int {
        // #warning Incomplete implementation, return the number of sections
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
        return basicChildInfo.count
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "ChildInfoCell") as! ChildInfoTableViewCell

        cell.formLabel.text = basicChildInfo[indexPath.row]

        return cell
    }


    //MARK: Segue to printController
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        let path = self.tableView.indexPathForSelectedRow!

        let destViewController = segue.destination as! PrintPageTableViewController

    }

    //MARK: Cancel Button Pressed
    @IBAction func cancelBtnPressed(_ sender: Any) {
        dismiss(animated: true, completion: nil)
    }

    @IBAction func saveBtnPressed(_ sender: Any) {

        let firstname = firstNameText.text ?? ""
        let middlename = middleNameText.text ?? ""
        let lastname = lastNameText.text ?? ""

        let formData = ChildInfo(cFirstName: firstname, cMiddleName: middlename, cLastName: lastname)
        self.navigationController?.popViewController(animated: true)

         formDelegate.saveInfoBlock(form: formData)

        saveInfoBLock()
    }

    func saveInfoBLock() {
        print("Saving Info")

        dismiss(animated: true, completion: nil)

    }

}

继承我的结构,我没有正确使用

struct ChildInfo {

    var childFirstName: String?
    var childMiddleName: String?
    var childLastName: String?


    var childsMadeUpName: String = ""

    init(cFirstName: String, cMiddleName: String, cLastName: String) {
        self.childFirstName = cFirstName
        self.childMiddleName = cMiddleName
        self.childLastName = cLastName
    }

}

最后是我的tableviewcell

class ChildInfoTableViewCell: UITableViewCell {

    @IBOutlet weak var formText: UITextField!
    @IBOutlet weak var formLabel: UILabel!



    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

}

委托协议通过后。 printtableviewcontroller中放置什么来显示数据?我有人在这里帮助我,但这一切都是以编程方式进行的,我还没有进展。

1 个答案:

答案 0 :(得分:0)

你可以做几件事:

  1. 使用委托。我假设这是你想要在这里实现的。
  2. 通过Segues传递您的数据。 (推荐)
  3. 要使用委托,您必须清楚地了解委派如何运作。

    这是我在其他网站上给某人的解释的链接。它打破了它,我想这可能对你有所帮助。

    https://teamtreehouse.com/community/totally-confused-with-the-example-used

    目前,我认为您的问题的解决方案是使用Segues。

    当您点击按钮转到ChildInfoTableViewController时,您填写的信息就是您要创建“ChildInfo”对象的位置。然后当您按save时,触发segue并将“ChildInfo”对象传递给“PagesController”。

    然后从那里,同一个对象应该通过segue进入打印视图。