Table of Contents

Introduction

Prerequisites

What Has Changed in the Seventh Edition?

Our Teaching Philosophy

How to Use This Book

Using an eBook

How This Book Is Organized

Style Choices

Typographical conventions

Necessary Hardware and Software

1. A Simple iOS Application

Creating an Xcode Project

Model-View-Controller

Designing Quiz

Interface Builder

Building the Interface

Creating view objects

Configuring view objects

Running on the simulator

A brief introduction to Auto Layout

Making connections

Creating the Model Layer

Implementing action methods

Loading the first question

Building the Finished Application

Application Icons

Launch Screen

For the More Curious: Running an Application on a Device

2. The Swift Language

Types in Swift

Using Standard Types

Inferring types

Specifying types

Literals and subscripting

Initializers

Properties

Instance methods

Optionals

Subscripting dictionaries

Loops and String Interpolation

Enumerations and the Switch Statement

Enumerations and raw values

Closures

Exploring Apple’s Swift Documentation

3. Views and the View Hierarchy

View Basics

The View Hierarchy

Creating a New Project

Views and Frames

Customizing the labels

The Auto Layout System

The alignment rectangle and layout attributes

Constraints

Adding constraints in Interface Builder

Intrinsic content size

Misplaced views

Adding more constraints

Challenges

Bronze Challenge: More Auto Layout Practice

Silver Challenge: Adding a Gradient Layer

Gold Challenge: Spacing Out the Labels

For the More Curious: Retina Display

4. View Controllers

The View of a View Controller

Setting the Initial View Controller

Tab Bar Controllers

Tab bar items

Loaded and Appearing Views

Refactoring in Xcode

Accessing subviews

Interacting with View Controllers and Their Views

Bronze Challenge: Another Tab

Silver Challenge: Different Background Colors

5. Programmatic Views

Creating a View Programmatically

Programmatic Constraints

Anchors

Activating constraints

Layout guides

Margins

Explicit constraints

Programmatic Controls

Bronze Challenge: Points of Interest

Silver Challenge: Rebuild the Conversion Interface

For the More Curious: NSAutoresizingMaskLayoutConstraint

6. Text Input and Delegation

Text Editing

Keyboard attributes

Responding to text field changes

Dismissing the keyboard

Implementing the Temperature Conversion

Number formatters

Delegation

Conforming to a protocol

Using a delegate

More on protocols

Bronze Challenge: Disallow Alphabetic Characters

Silver Challenge: Displaying the User’s Region

7. Internationalization and Localization

Internationalization

Formatters

Base internationalization

Preparing for localization

Localization

NSLocalizedString and strings tables

Bronze Challenge: Another Localization

For the More Curious: Bundle’s Role in Internationalization

For the More Curious: Importing and Exporting as XLIFF

8. Debugging

A Buggy Project

Debugging Basics

Interpreting console messages

Fixing the first bug

Caveman debugging

The Xcode Debugger: LLDB

Setting breakpoints

Stepping through code

The LLDB console

9. UITableView and UITableViewController

Beginning the LootLogger Application

UITableViewController

Subclassing UITableViewController

Creating the Item Class

Custom initializers

UITableView’s Data Source

Giving the controller access to the store

Implementing data source methods

UITableViewCells

Creating and retrieving UITableViewCells

Reusing UITableViewCells

Editing Table Views

Editing mode

Adding rows

Deleting rows

Moving rows

Design Patterns

Bronze Challenge: Sections

Silver Challenge: Constant Rows

Gold Challenge: Favorite Items

10. Subclassing UITableViewCell

Creating ItemCell

Exposing the Properties of ItemCell

Using ItemCell

Dynamic Cell Heights

Dynamic Type

Responding to user changes

Bronze Challenge: Cell Colors

Silver Challenge: Long Item Names

11. Stack Views

Using UIStackView

Implicit constraints

Stack view distribution

Nested stack views

Stack view spacing

Segues

Hooking Up the Content

Passing Data Around

Bronze Challenge: More Stack Views

12. Navigation Controllers

UINavigationController

Navigating with UINavigationController

Appearing and Disappearing Views

Dismissing the Keyboard

Event handling basics

Dismissing by pressing the Return key

Dismissing by tapping elsewhere

UINavigationBar

Adding buttons to the navigation bar

Bronze Challenge: Displaying a Number Pad

Silver Challenge: A Different Back Button Title

Gold Challenge: Pushing More View Controllers

13. Saving, Loading, and Scene States

Codable

Property Lists

Error Handling

Application Sandbox

Constructing a file URL

Scene States and Transitions

Persisting the Items

Notification center

Saving the Items

Loading the Items

Bronze Challenge: Throwing Errors

Gold Challenge: Support Multiple Windows

For the More Curious: Manually Conforming to Codable

For the More Curious: Scene State Transitions

For the More Curious: The Application Bundle

14. Presenting View Controllers

Adding a Camera Button

Alert Controllers

Presentation Styles

15. Camera

Displaying Images and UIImageView

Taking Pictures and UIImagePickerController

Creating a UIImagePickerController

Setting the image picker’s delegate

Presenting the image picker modally

Permissions

Saving the image

Creating ImageStore

Giving View Controllers Access to the Image Store

Creating and Using Keys

Persisting Images to Disk

Loading Images from the ImageStore

Bronze Challenge: Editing an Image

Silver Challenge: Removing an Image

For the More Curious: Navigating Implementation Files

// MARK:

16. Adaptive Interfaces

Size Classes

Modifying traits for a specific size class

Adapting to Dark Mode

Adding colors to the Asset Catalog

Using custom dynamic colors

Bronze Challenge: Stacked Text Field and Labels

17. Extensions and Container View Controllers

Starting Mandala

Creating the model types

Adding resources to the Asset Catalog

Extensions

Creating a custom container view controller

Creating the MoodSelectionViewController

Creating the MoodListViewController

Handling the embed segue

18. Custom Controls

Creating a Custom Control

Relaying actions

Using the Custom Control

Updating the Interface

Adding the Highlight View

Bronze Challenge: More Access Control

19. Controlling Animations

Property Animators

Basic animations

Timing functions

Spring animations

Animating Colors

Animating a Button

20. Web Services

Starting the Photorama Application

Building the URL

Formatting URLs and requests

URLComponents

Sending the Request

URLSession

Modeling the Photo

JSON Data

JSONDecoder and JSONEncoder

Parsing JSON data

Enumerations and Associated Values

Passing the Photos Around

Downloading and Displaying the Image Data

The Main Thread

Bronze Challenge: Printing the Response Information

Silver Challenge: Fetch Recent Photos from Flickr

For the More Curious: HTTP

21. Collection Views

Displaying the Grid

Collection View Data Source

Customizing the Layout

Creating a Custom UICollectionViewCell

Downloading the Image Data

Image caching

Navigating to a Photo

Bronze Challenge: Horizontal Scrolling

Silver Challenge: Updated Item Sizes

22. Core Data

Object Graphs

Entities

Modeling entities

NSManagedObject and subclasses

NSPersistentContainer

Updating Items

Inserting into the context

Saving changes

Updating the Data Source

Fetch requests and predicates

Silver Challenge: Photo View Count

For the More Curious: The Core Data Stack

NSManagedObjectModel

NSPersistentStoreCoordinator

NSManagedObjectContext

23. Core Data Relationships

Relationships

Adding Tags to the Interface

Background Tasks

Silver Challenge: Favorites

24. Accessibility

VoiceOver

Testing VoiceOver

Accessibility in Photorama

Bronze Challenge: VoiceOver Pronunciation

25. Afterword

What to Do Next

Shameless Plugs

Index

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset