| 
									
										
										
										
											2018-10-12 15:37:13 -04:00
										 |  |  | --- | 
					
						
							|  |  |  | title: View Controllers | 
					
						
							|  |  |  | --- | 
					
						
							|  |  |  | ## View Controllers
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This is an example of what a basic view in Swift looks like.  | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  ```Swift | 
					
						
							|  |  |  |   import UIKit | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   class ViewController: UIViewController { | 
					
						
							|  |  |  |       // 1 | 
					
						
							|  |  |  |       override func viewDidLoad() { | 
					
						
							|  |  |  |           // 2 | 
					
						
							|  |  |  |           super.viewDidLoad() | 
					
						
							|  |  |  |           // 3 | 
					
						
							|  |  |  |           view.backgroundColor = .white | 
					
						
							|  |  |  |       }   | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |  ``` | 
					
						
							|  |  |  | 1. Loads view after the controller loads. | 
					
						
							|  |  |  | 2. Overrides the UIViewController class. This is a necessary step for any view controller. | 
					
						
							| 
									
										
										
										
											2018-10-29 18:40:39 -04:00
										 |  |  | 3. Sets background color to white. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ## Extending View Controllers
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Extensions can help keep your code clean when conforming to multiple protocols. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This is an example of how you can add a TableView to a Basic View Controller. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```Swift | 
					
						
							|  |  |  |   import UIKit | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   class ViewController: UIViewController { | 
					
						
							|  |  |  |       // 1 | 
					
						
							|  |  |  |       @IBOutlet weak var tableView: UITableView! | 
					
						
							|  |  |  |        | 
					
						
							|  |  |  |       // 2 | 
					
						
							|  |  |  |       let data = ["New York, NY", "Los Angeles, CA", "Chicago, IL", "Houston, TX", | 
					
						
							|  |  |  |         "Philadelphia, PA", "Phoenix, AZ", "San Diego, CA", "San Antonio, TX", | 
					
						
							|  |  |  |         "Dallas, TX", "Detroit, MI", "San Jose, CA", "Indianapolis, IN", | 
					
						
							|  |  |  |         "Jacksonville, FL", "San Francisco, CA", "Columbus, OH", "Austin, TX", | 
					
						
							|  |  |  |         "Memphis, TN", "Baltimore, MD", "Charlotte, ND", "Fort Worth, TX"] | 
					
						
							|  |  |  |        | 
					
						
							|  |  |  |       override func viewDidLoad() { | 
					
						
							|  |  |  |           super.viewDidLoad() | 
					
						
							|  |  |  |            | 
					
						
							|  |  |  |           // 10 | 
					
						
							|  |  |  |           tableView.dataSource = self | 
					
						
							|  |  |  |           // 11 | 
					
						
							|  |  |  |           tableView.register(UITableViewCell.self, forCellReuseIdentifier: "myCellIdentifier") | 
					
						
							|  |  |  |       }   | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  |   // 3 | 
					
						
							|  |  |  |   extension ViewController: UITableViewDataSource { | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  |       // 4 | 
					
						
							|  |  |  |       func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { | 
					
						
							|  |  |  |           // 5 | 
					
						
							|  |  |  |           let cell = tableView.dequeueReusableCell(withIdentifier: "myCellIdentifier", for: indexPath) | 
					
						
							|  |  |  |           // 6 | 
					
						
							|  |  |  |           cell.textLabel?.text = data[indexPath.row] | 
					
						
							|  |  |  |           // 7 | 
					
						
							|  |  |  |           return cell | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |        | 
					
						
							|  |  |  |       // 8 | 
					
						
							|  |  |  |       func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { | 
					
						
							|  |  |  |           // 9 | 
					
						
							|  |  |  |           return data.count | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 1. Define the outlet for our tableView | 
					
						
							|  |  |  | 2. Define the data that we'll be loading into our tableView | 
					
						
							|  |  |  | 3. Adds extension to ViewController class that conforms to UITableViewDataSource | 
					
						
							|  |  |  | 4. Implement the UITableViewDataSource stubs for required methods - cellForRowAt (defines what goes in a specific cell) | 
					
						
							|  |  |  | 5. Define a cell as a resuable element with the identifier "myCellIdentifier" | 
					
						
							|  |  |  | 6. Provide our cell's textLabel with the referenced data | 
					
						
							|  |  |  | 7. Return that cell | 
					
						
							|  |  |  | 8. Implement the UITableViewDataSource stubs for required methods - numberOfRowsInSection (defines how many rows will be in your tableView) | 
					
						
							|  |  |  | 9. Return the size of our data array | 
					
						
							|  |  |  | 10. Set the tableView's dataSource to self when the view loads | 
					
						
							|  |  |  | 11. register the tableView's cell |