Tables - Washington State Universityholder/courses/MAD/slides/05-Tables.pdfTable View Controller...

21
Tables Mobile Application Development in iOS School of EECS Washington State University Instructor: Larry Holder Mobile Application Development in iOS 1

Transcript of Tables - Washington State Universityholder/courses/MAD/slides/05-Tables.pdfTable View Controller...

Page 1: Tables - Washington State Universityholder/courses/MAD/slides/05-Tables.pdfTable View Controller Mobile Application Development in iOS 3 1. Add Table View Controller to Storyboard.

TablesMobile Application Development in iOS

School of EECS

Washington State University

Instructor: Larry Holder

Mobile Application Development in iOS 1

Page 2: Tables - Washington State Universityholder/courses/MAD/slides/05-Tables.pdfTable View Controller Mobile Application Development in iOS 3 1. Add Table View Controller to Storyboard.

Outline

• Table View Controller

• Table View

• Table Cells

• Cell interaction

Mobile Application Development in iOS 2

Page 3: Tables - Washington State Universityholder/courses/MAD/slides/05-Tables.pdfTable View Controller Mobile Application Development in iOS 3 1. Add Table View Controller to Storyboard.

Table View Controller

Mobile Application Development in iOS 3

1. Add Table View Controller to Storyboard.

2. Create Cocoa Touch Class inheriting from UITableViewController.

3. Assign new class to Table View Controller.

Page 4: Tables - Washington State Universityholder/courses/MAD/slides/05-Tables.pdfTable View Controller Mobile Application Development in iOS 3 1. Add Table View Controller to Storyboard.

Table View Content: Static

• Multiple sections

• Fixed number of cells

• Design each cell

individually

Mobile Application Development in iOS 4

Page 5: Tables - Washington State Universityholder/courses/MAD/slides/05-Tables.pdfTable View Controller Mobile Application Development in iOS 3 1. Add Table View Controller to Storyboard.

Table View Controller: Static

Mobile Application Development in iOS 5

class TableViewController: UITableViewController {

// MARK: - Table view data source

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

}

override func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int {

// #warning Incomplete implementation, return the number of rowsswitch section {case 0: return 2case 1: return 1default: return 0}

}}

Page 6: Tables - Washington State Universityholder/courses/MAD/slides/05-Tables.pdfTable View Controller Mobile Application Development in iOS 3 1. Add Table View Controller to Storyboard.

Table View Content: Dynamic

• Variable number of cells

• Preset cell style or custom

• Must specify identifier for each cell prototype

Mobile Application Development in iOS 6

Page 7: Tables - Washington State Universityholder/courses/MAD/slides/05-Tables.pdfTable View Controller Mobile Application Development in iOS 3 1. Add Table View Controller to Storyboard.

Table Cell Styles

• Table cell styles

– Basic

– Right detail

– Left detail

– Subtitle

– Custom

Mobile Application Development in iOS 7

Page 8: Tables - Washington State Universityholder/courses/MAD/slides/05-Tables.pdfTable View Controller Mobile Application Development in iOS 3 1. Add Table View Controller to Storyboard.

Delegate and Data Source• Where does table send messages? Get data?

• UITableViewDelegate protocol

– Configuring table

– Handling table interaction

• UITableViewDataSource

– Source for each row's data

– Handling insertion and deletion

Mobile Application Development in iOS 8

Page 9: Tables - Washington State Universityholder/courses/MAD/slides/05-Tables.pdfTable View Controller Mobile Application Development in iOS 3 1. Add Table View Controller to Storyboard.

Table View Controller: Dynamic

Mobile Application Development in iOS 9

class MainTableViewController: UITableViewController {

var foodItems = ["Pizza", "Spaghetti", "Ice Cream"]

override func numberOfSections(in tableView: UITableView) -> Int {return 1

}

override func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int {

return foodItems.count}

override func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {

let cell = tableView.dequeueReusableCell(withIdentifier: "basicCell", for: indexPath)

// Configure the cell...let indexRow = indexPath.rowcell.textLabel?.text = foodItems[indexRow]return cell

}}

Page 10: Tables - Washington State Universityholder/courses/MAD/slides/05-Tables.pdfTable View Controller Mobile Application Development in iOS 3 1. Add Table View Controller to Storyboard.

Custom Cells

• Create a custom table cell class

• Connect cell items in Storyboard to class

outlets and actions

Mobile Application Development in iOS 10

Page 11: Tables - Washington State Universityholder/courses/MAD/slides/05-Tables.pdfTable View Controller Mobile Application Development in iOS 3 1. Add Table View Controller to Storyboard.

Custom Cells: Step 1

• Create custom class inheriting UITableViewCell

• Initialize and configure defaults as needed

Mobile Application Development in iOS 11

class FoodCell: UITableViewCell {

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

}}

Page 12: Tables - Washington State Universityholder/courses/MAD/slides/05-Tables.pdfTable View Controller Mobile Application Development in iOS 3 1. Add Table View Controller to Storyboard.

Custom Cells: Step 2

• Create custom table view prototype cell on

Storyboard

• Set Identifier

• Set Custom Class

to class from Step 1

Mobile Application Development in iOS 12

Page 13: Tables - Washington State Universityholder/courses/MAD/slides/05-Tables.pdfTable View Controller Mobile Application Development in iOS 3 1. Add Table View Controller to Storyboard.

Custom Cells: Step 3

• Design cell (mini-view)

• Connect cell elements to cell class

Mobile Application Development in iOS 13

Page 14: Tables - Washington State Universityholder/courses/MAD/slides/05-Tables.pdfTable View Controller Mobile Application Development in iOS 3 1. Add Table View Controller to Storyboard.

Custom Cells: Step 4

• Configure cells in UITableViewController

Mobile Application Development in iOS 14

class MainTableViewController: UITableViewController {// ...

override func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell

{let cell = tableView.dequeueReusableCell(withIdentifier:

"foodCell", for: indexPath) as! FoodCelllet indexRow = indexPath.rowcell.foodNameLabel.text = foodItems[indexRow]cell.foodImageView.image = UIImage(named: foodImages[indexRow])cell.caloriesLabel.text = "\(foodCals[indexRow]) cals"return cell

}}

Page 15: Tables - Washington State Universityholder/courses/MAD/slides/05-Tables.pdfTable View Controller Mobile Application Development in iOS 3 1. Add Table View Controller to Storyboard.

Navigation1. Create segue from prototype

cell to destination view

– Access tableView. indexPathForSelectedRow in

prepare for segue

2. Or, create segue from view icon to destination view

– Perform this segue in

tableView:didSelectRowAt

Mobile Application Development in iOS 15

1

2

Page 16: Tables - Washington State Universityholder/courses/MAD/slides/05-Tables.pdfTable View Controller Mobile Application Development in iOS 3 1. Add Table View Controller to Storyboard.

Cell Interaction: Selection

• Row Selection

• Accessory Selection (only for Detail )

Mobile Application Development in iOS 16

override func tableView(_ tableView: UITableView,didSelectRowAt indexPath: IndexPath) {

let cell = tableView.cellForRow(at: indexPath) as! FoodCellcell.foodNameLabel.textColor = UIColor.red

}

override func tableView(_ tableView: UITableView,accessoryButtonTappedForRowWith indexPath: IndexPath) {

self.detailIndexPath = indexPath // retain for prepareForSegueperformSegue(withIdentifier: "mainToDetail2", sender: nil)

}

Page 17: Tables - Washington State Universityholder/courses/MAD/slides/05-Tables.pdfTable View Controller Mobile Application Development in iOS 3 1. Add Table View Controller to Storyboard.

Cell Interaction: Deletion

Mobile Application Development in iOS 17

// Override to support conditional editing of the table view.override func tableView(_ tableView: UITableView,

canEditRowAt indexPath: IndexPath) -> Bool {// Return false if you do not want the specified item to be editable.return true

}

// Override to support editing the table view.override func tableView(_ tableView: UITableView,

commit editingStyle: UITableViewCellEditingStyle,forRowAt indexPath: IndexPath) {

if editingStyle == .delete {// Delete the row from the data source firstlet row = indexPath.rowfoodItems.remove(at: row)foodImages.remove(at: row)foodCals.remove(at: row)tableView.deleteRows(at: [indexPath],

with: .fade)}

}

Page 18: Tables - Washington State Universityholder/courses/MAD/slides/05-Tables.pdfTable View Controller Mobile Application Development in iOS 3 1. Add Table View Controller to Storyboard.

Insertion

• Add items to data source

• tableView.reloadData()

Mobile Application Development in iOS 18

@IBAction func addTapped(_ sender: UIBarButtonItem) {foodItems.append("Food")foodImages.append("food.png")foodCals.append(100)tableView.reloadData()

}

Page 19: Tables - Washington State Universityholder/courses/MAD/slides/05-Tables.pdfTable View Controller Mobile Application Development in iOS 3 1. Add Table View Controller to Storyboard.

Adding Table View to Existing View

Mobile Application Development in iOS 19

Page 20: Tables - Washington State Universityholder/courses/MAD/slides/05-Tables.pdfTable View Controller Mobile Application Development in iOS 3 1. Add Table View Controller to Storyboard.

Set Delegate and Data Source Programmatically

• Conform view controller to UITableViewDelegate and

UITableViewDataSource protocols

• Create outlet connection to table view

• Set table view delegate and datasource to self

Mobile Application Development in iOS 20

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource{

@IBOutlet weak var relatedTableView: UITableView!

override func viewDidLoad() {super.viewDidLoad()// Do any additional setup after loading the view.relatedTableView.delegate = selfrelatedTableView.dataSource = self

}

Page 21: Tables - Washington State Universityholder/courses/MAD/slides/05-Tables.pdfTable View Controller Mobile Application Development in iOS 3 1. Add Table View Controller to Storyboard.

Resources

• Start Developing iOS Apps

– developer.apple.com/library/archive/referencelibrary/

GettingStarted/DevelopiOSAppsSwift

– Archived, but still good tutorial on Tables

• Table Views (documentation)

– developer.apple.com/documentation/uikit/views_and

_controls/table_views

Mobile Application Development in iOS 21