I am in the process of making my first app. Right now I am trying to make a settings page. So far it looks like this.
I have the split view controller hooked up to a master view controller and a detail view controller (code below). As you can see, right now there is a table view on the left side of the split view controller containing different buttons. When each button is pressed I want it to display a list of words on the right side of the view controller. It does display a list of words already but I want it to display the words stacked horizontally in a table view and I am not sure how to go about doing this.
//
// MasterViewController.swift
// firstapp
//
// Created by Anthony Rubin on 7/18/17.
// Copyright © 2017 rubin. All rights reserved.
//
import UIKit
protocol WordSelectionDelegate: class {
func wordSelected(newWord: Word)
}
class MasterViewController: UITableViewController {
var words = [Word]()
weak var delegate: WordSelectionDelegate?
override func viewDidLoad() {
super.viewDidLoad()
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
self.words.append(Word(name: "initial /l/ 1 syllable", description: "lake lamb lamp lark leaf leash left leg lime lion lips list lock log look love lunch"))
self.words.append(Word(name: "initial /l/ multisyllabic", description: "words, words, words, words"))
self.words.append(Word(name: "intersyllabic /l/", description: "words, words, words, words"))
self.words.append(Word(name: "final /l/", description: "words, words, words, words"))
self.words.append(Word(name: "initial /pl/", description: "words, words, words, words"))
self.words.append(Word(name: "initial /bl/", description: "words, words, words, words"))
self.words.append(Word(name: "initial /fl/", description: ""))
self.words.append(Word(name: "initial /gl/", description: "words, words, words, words"))
self.words.append(Word(name: "initial /kl/", description: ""))
self.words.append(Word(name: "initial /sl/", description: ""))
self.words.append(Word(name: "final /l/ clusters", description: ""))
}
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 self.words.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
// Configure the cell...
let word = self.words[indexPath.row]
cell.textLabel?.text = word.name
return cell
}
override func tableView(_ tableView: UITableView, didSelectRowAt
indexPath: IndexPath) {
let selectedMonster = self.words[indexPath.row]
self.delegate?.wordSelected(newWord: selectedMonster)
if let Detail = self.delegate as? Detail {
splitViewController?.showDetailViewController(Detail, sender: nil)
}
}
__
import UIKit
class Detail: UIViewController {
@IBOutlet weak var descriptionLabel: UILabel!
var word: Word! {
didSet (newWord) {
self.refreshUI()
}
}
func refreshUI() {
descriptionLabel?.text = word.description
}
override func viewDidLoad() {
super.viewDidLoad()
refreshUI()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
extension Detail: WordSelectionDelegate {
func wordSelected(newWord: Word) {
word = newWord
}
}
--
class Word {
let name: String
let description: String
init(name: String, description: String) {
self.name = name
self.description = description
}
}
--
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
let splitViewController = self.window!.rootViewController as! UISplitViewController
let leftNavController = splitViewController.viewControllers.first as! UINavigationController
let MasterViewController = leftNavController.topViewController as! MasterViewController
let Detail = splitViewController.viewControllers.last as! Detail
let firstWord = MasterViewController.words.first
Detail.word = firstWord
MasterViewController.delegate = Detail
return true
}
PS. If you look at the MasterViewController code you will see where it says "description". the lists contained in description is what should be displayed in the table view on the right.