basics & beyond - files.meetup.comfiles.meetup.com/9892342/iosstoryboarding.pdf · basics &...

57
iOS Storyboarding Basics & Beyond Tarun Sharma iOS Engineer

Upload: others

Post on 24-May-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

iOS StoryboardingBasics & Beyond

Tarun Sharma iOS Engineer

Page 2: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Agenda

• Intro to Storyboards

• Brief about designing for size classes

• Storyboard References

• Unwind Segues

• Multi Storyboard environment iOS < 9.0

• Custom Segues

• Reusable Views

Page 3: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Intro to Storyboards

Page 4: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

View Controller Scenes

Page 5: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Segues

Page 6: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Segues Kind

Page 7: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Show (e.g. Push)

Segues Kind

Page 8: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Show (e.g. Push)

Segues Kind

Show Details

Page 9: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Show (e.g. Push)

Segues Kind

Show Details

Present Modally

Page 10: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Show (e.g. Push)

Segues Kind

Show Details

Present Modally

Present Popover

Page 11: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Show (e.g. Push)

Segues Kind

Show Details

Present Modally

Present Popover

Custom

Page 12: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Show (e.g. Push)

Segues Kind

Show Details

Present Modally

Present Popover

Custom

Page 13: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Segues with a trigger

Page 14: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Segues without a trigger

Page 15: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Segues to self

Page 16: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Designing for Size classes Demo

Page 17: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

• Storyboard are large files: slow to load sometimes.

• Requires a big screen to display all (or even partial) content.

• Easily breakable when merging (Git) .

• Cannot reference (or include) other storyboards/XIBs.

Inconveniences of Storyboard

Page 18: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Main Storyboard

Navigation Controller

Table View Controller

Details View Controller

Root segue

Show segue

Page 19: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)
Page 20: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Main.Storyboard Second.Storyboard

Page 21: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Storyboard References

Page 22: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Storyboard References

Stands in for another scene

Can be destination of Relationship or Triggered Segue

Reference can be in same storyboard or another storyboard

Main storyboard

Secondary storyboard

Reference

Page 23: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

DemoStoryboard References

Page 24: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Tab Bar

NVC1

NVC2

NVC3

1

32

32

3

#Demo

Page 25: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

4

Go To 1

Go To 3

Presenting Controller

1 2 3

Page 26: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Going Back

• Segues are for new instances only • Going back is a manual process.

• Define a delegate • Assign self to next view controller • Handle user action • Invoke the delegate and pass data • Perform navigation

Page 27: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Unwind Segue

Page 28: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Unwind SeguePicking a destination

Destination picking is manual

Resolve happens on runtime @IBAction func back(segue:UIStoryboardSegue) { }

Implement this method in one of the previous

controller

Page 29: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Unwind SeguePicking a destination

Page 30: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Unwind Segue Flow

4

Go To 1

Go TO 3

Presenting Controller

1 2 3

shouldPerformSegueWithIdentifier (identifier: String, sender: AnyObject?) -> Bool

NO

Abort

Page 31: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Unwind Segue Flow

4

Go To 1

Go TO 3

Presenting Controller

1 2 3

shouldPerformSegueWithIdentifier (identifier: String, sender: AnyObject?) -> Bool

YES

Page 32: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Unwind Segue Flow

4

Go To 1

Go TO 3

Presenting Controller

1 2 3

canPerformUnwindSegueAction(action: Selector, fromViewController: UIViewController, sender: AnyObject) -> Bool

YES

unwindToRoot (sender:

UIStoryboardSegue)

Crash

Not Implemented

Page 33: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Unwind Segue Flow

4

Go To 1

Go TO 3

Presenting Controller

1 2 3

canPerformUnwindSegueAction(action: Selector, fromViewController: UIViewController, sender: AnyObject) -> Bool

YES

unwindToRoot (sender:

UIStoryboardSegue)

Pop

Implemented

Page 34: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Unwind Segue Flow

4

Go To 1

Go TO 3

Presenting Controller

1 2 3

canPerformUnwindSegueAction(action: Selector, fromViewController: UIViewController, sender: AnyObject) -> Bool

NO

Page 35: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Unwind Segue Flow

4

Go To 1

Go TO 3

Presenting Controller

1 2 3

canPerformUnwindSegueAction(action: Selector, fromViewController: UIViewController, sender: AnyObject) -> Bool

YES

unwindToRoot (sender:

UIStoryboardSegue)

Pop

Implemented

Page 36: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Multiple StoryboardsWithout Storyboard References

Page 37: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Main.storyboard

Page 38: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Main.Storyboard Second.Storyboard

Page 39: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Main.StoryboardSecond.Storyboard

Capture user interaction

Page 40: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Main.StoryboardSecond.StoryboardCapture user interaction

UIStoryboard(name: “Second",bundle:nil)

Page 41: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Main.StoryboardSecond.StoryboardCapture user interaction

secondStoryBoard. instantiateInitialViewController()

UIStoryboard(name: “Second",bundle:nil)

Page 42: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Main.StoryboardSecond.StoryboardCapture user interaction

navigation.pushViewController (secondViewController, animated:true)

UIStoryboard(name: “Second",bundle:nil)

secondStoryBoard. instantiateInitialViewController()

Page 43: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Main.StoryboardSecond.Storyboard

navigation.pushViewController (secondViewController, animated:true)

Capture user interaction

UIStoryboard(name: “Second",bundle:nil)

secondStoryBoard. instantiateInitialViewController()

Page 44: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Multiple StoryboardsDemo

Page 45: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Custom Segues

Page 46: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Custom Segues

Page 47: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Custom Segues

Page 48: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Custom Segues

{ }

Page 49: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Custom Segues

• Subclass UIStoryboardSegue

• Override perform() override func perform() -> () { setUpAnimation() sourceViewController .pushViewController(…) }

• Call super.perform()

Page 50: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Custom SeguesMultiple storyboards without storyboard reference

• Connect a segue from control to parent view controller

• Change kind to Custom segue • Give identifier as “controller@storyboard”

• Perform transition to controller of storyboard

• If controller is not provided then perform transition to

initial view controller of storyboard

Page 51: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Reusable views

Page 52: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Adam

Reusable views

Eve India USA

Page 53: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

EveIndiaAdamUSAText

Reusable views

TextTextTextText

XIB

Page 54: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Reusable views

• Create UI in a separate XIB file

• Create auto layout constraints

• Create a subclass of UIView, Ex. CustomView

• Assign XIB file owner class to CustomView

• Override initWithFrame(:) and initWithCoder(:) in CustomView class

• Load view from XIB file and add as subview to CustomView

• Drag a UIView in UIViewController scene in storyboard

• Assign UIView’s class to CustomView

Page 55: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Text

Reusable views

TextXIB

initWithCoder(:)

addSubview

Page 56: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Reusable View Demo

Page 57: Basics & Beyond - files.meetup.comfiles.meetup.com/9892342/iOSStoryboarding.pdf · Basics & Beyond Tarun Sharma iOS Engineer. Agenda ... • Easily breakable when merging (Git)

Thank you