86 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | |
| 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.
 | |
| 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
 |