0

So I have a UISplitViewController and in the DetailView I have a UITableView.

What I want to do is take the selected cell from the root view controller and append it to the string which is populating my tableview in the detail view controller. I can append with selection very easily but I need help with is the updating part.

What's supposed to happen is when you click the cell, it appends the value in the cell to the global variable main.BoatManifest, and then update the table. I just don't know how to do that.

Here's some code:

import UIKit

class DetailViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, FullListCellDelegate {

@IBOutlet weak var tableView: UITableView!

func updateName(sender: FullListCell, detVC: DetailViewController) {
    tableView.reloadData()
}

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
}


override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

// MARK: - Table view data source

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

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


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

 // Configure the cell...
    cell.textLabel?.text = main.BoatManifest[indexPath.row]


 return cell
 }


}

struct Main {

var BoatManifest: [String] = []

}

var main = Main(BoatManifest: [" "])

This is the code for my detail view and the struct Main on the bottom is just a global variable. My MainView code is this:

import UIKit

protocol NameSelectionDelegate: class {
func nameSelected()
}

class MasterViewController: UITableViewController {


var Names: [String] = ["John", "Mark", "Paul", "Jeremy"]

override func viewDidLoad() {
    super.viewDidLoad()

    if let split = self.splitViewController {
        let controllers = split.viewControllers
        self.detailViewController = (controllers[controllers.count-1] as! UINavigationController).topViewController as? DetailViewController
    }

    }

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

// MARK: - Table view data source

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 Names.count
}


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

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

    return cell
}

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    main.BoatManifest.append(Names[indexPath.row])
    NotificationCenter.default.addObserver(self, selector: #selector(loadList), name: NSNotification.Name(rawValue: "load"), object: nil)


}
func loadList(){
    //load data here
    self.tableView.reloadData()
}

}

I attempted to use a UISplitViewController tutorial to figure it out but it didn't have the tableview in the detail view controller. I need to send a message when I select the cell to the detail tableview and have it update with the appended text.

Thanks for your help.

  • To see if I understand, you've gotten thing as far as when you click on a cell, the string is added to the appropriate data model (`BoatManifest`?) and now you need to know how to update the table when that model changes? – Scott Thompson May 02 '17 at 17:39
  • Correct. I think I found an alternative solution to my original problem though. I just needed two tableviews in one view controller and I found this http://stackoverflow.com/questions/30043015/change-second-table-content-based-on-first-table-row-selected-in-swift and It works just how i wanted it. – Christopher Hines May 03 '17 at 16:18

0 Answers0