the life and times of uiviewcontroller

Post on 10-May-2015

746 Views

Category:

Technology

5 Downloads

Preview:

Click to see full reader

TRANSCRIPT

The Life and Times of UIViewController

Brandon Alexander

Wednesday, September 18, 13

Who am IiOS Developer, Author, Speaker

Email: brandon.alexander@gmail.com

GTalk: brandon.alexander@gmail.com

Twitter/ADN: @balexander

Wednesday, September 18, 13

Design Pattern

A general reusable solution to a commonly occurring problem within a given context in software design

Wednesday, September 18, 13

MVC

• Model

• View

• Controller

Wednesday, September 18, 13

Controller

• Mediates between view and model

• Subclasses UIViewController

Wednesday, September 18, 13

Agenda

Wednesday, September 18, 13

Agenda

• UIViewController Lifecycle

Wednesday, September 18, 13

Agenda

• UIViewController Lifecycle

• Presenting other view controllers

Wednesday, September 18, 13

Agenda

• UIViewController Lifecycle

• Presenting other view controllers

• View Controller Containment

Wednesday, September 18, 13

Agenda

• UIViewController Lifecycle

• Presenting other view controllers

• View Controller Containment

• [REDACTED]

Wednesday, September 18, 13

Lifecycle

• Creation

• Interaction

• Destruction

Wednesday, September 18, 13

Creation

• NIB (or XIB)

• Storyboard

• In Code

Wednesday, September 18, 13

NIB

- (id) initWithNibName:(NSString *)n bundle:(NSBundle *)b

Wednesday, September 18, 13

Storyboard

- (instancetype) initWithCoder:(NSCoder *)c

Wednesday, September 18, 13

Code

- (instancetype) init- (instancetype) initWith...

- (void) loadView

Wednesday, September 18, 13

Creation Tips

• Wait for viewDidLoad for some startup items

• Don’t reference vc.view before viewDidLoad is called

• Use -[UIVC isViewLoaded]

• Use UIGestureRecognizer when possible

Wednesday, September 18, 13

Interaction

• Respond to user actions

• Delegate/Data Source Methods

• Respond to rotation events

• Respond to application notifications

• Navigate to other view controllers

Wednesday, September 18, 13

Important Methods- (void) viewWillAppear:(BOOL)animated- (void) viewDidAppear:(BOOL)animated

- (void) viewWillDisappear:(BOOL)animated- (void) viewDidDisappear:(BOOL)animated

- (void) viewWillLayoutSubviews- (void) viewDidLayoutSubviews

- (void) didReceiveMemoryWarning

Wednesday, September 18, 13

Rotation Support

• Info.plist shows all supported orientations

• Implement proper methods to support each orientation in each view controller

Wednesday, September 18, 13

Interaction Tips

• Split Data Source methods out to helper objects

• Keep the focus of the class in mind

Wednesday, September 18, 13

Destruction

• Implement dealloc when necessary

• Many existing UIKit classes aren’t ARCified

• Set delegate/dataSource properties to nil

Wednesday, September 18, 13

Presenting View Controllers

! //Create VC! UIViewController *vc = [UIViewController new];!! //Configure! vc.modalPresentationStyle = UIModalPresentationFormSheet;! vc.modalTransitionStyle = UIModalTransitionStyleCoverVertical;!! //Present! [self presentViewController:vc animated:YES completion:nil];

Wednesday, September 18, 13

Dismissing Presented View Controllers

• Multiple Approaches

• Delegation

• Post to the responder chain

• Don’t have a view controller dismiss itself

Wednesday, September 18, 13

View Controller Containment

• Keeps View Controller hierarchy the same as the view hierarchy

• Helps solve the Massive View Controller anti-pattern

Wednesday, September 18, 13

Adding a Child VC

- (void) displayContentController: (UIViewController*) content {! [self addChildViewController:content];! content.view.frame = [self frameForContentController];! [self.view addSubview:self.currentClientView];! [content didMoveToParentViewController:self];}

Wednesday, September 18, 13

Removing a child VC

- (void) hideContentController: (UIViewController*) content {! [content willMoveToParentViewController:nil];! [content.view removeFromSuperview];! [content removeFromParentViewController];}

Wednesday, September 18, 13

Other Containment Methods

- (BOOL) shouldAutomaticallyForwardAppearanceMethods- (BOOL) shouldAutomaticallyForwardRotationMethods

Wednesday, September 18, 13

iOS 7

• Custom View Controller Transitions

• Different layout paradigms

• -automaticallyAdjustsScrollViewInsets

• UIKit Dynamics

Wednesday, September 18, 13

Architecture

• Avoid Massive View Controllers

• Centralize networking code

• Controllers don’t have to be view controllers

Wednesday, September 18, 13

Other Tricks

• Use nil-target actions in views

• Lazy load in container view controllers

• Don’t bother cleaning up in will(Dis)Appear

Wednesday, September 18, 13

Resources

• View Controller Programming Guide

• About Cocoa Auto Layout

• iOS 7 UI Transition Guide

Wednesday, September 18, 13

Questions

Wednesday, September 18, 13

Contact

Email: brandon.alexander@gmail.com

GTalk: brandon.alexander@gmail.com

Twitter/ADN: @balexander

Wednesday, September 18, 13

top related