├── .gitignore ├── 00.Overview └── Overview.md ├── 01.Concepts ├── Concepts.md ├── Support Files │ ├── ConceptScreenshot1 │ │ ├── ConceptScreenshot1.xcodeproj │ │ │ ├── project.pbxproj │ │ │ └── project.xcworkspace │ │ │ │ └── contents.xcworkspacedata │ │ └── ConceptScreenshot1 │ │ │ ├── AppDelegate.swift │ │ │ ├── Assets.xcassets │ │ │ └── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ ├── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ │ ├── Info.plist │ │ │ └── ViewController.swift │ ├── ConceptScreenshot2 │ │ ├── ConceptScreenshot2.xcodeproj │ │ │ ├── project.pbxproj │ │ │ └── project.xcworkspace │ │ │ │ └── contents.xcworkspacedata │ │ └── ConceptScreenshot2 │ │ │ ├── AppDelegate.swift │ │ │ ├── Assets.xcassets │ │ │ └── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ ├── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ │ ├── Info.plist │ │ │ └── ViewController.swift │ └── Screenshots.key └── images │ ├── concepts_indexpath.png │ ├── concepts_table_styles.png │ └── concepts_terms.png ├── 02.SetupWithCode ├── Sample Code │ ├── SetupWithObjcCode │ │ ├── SetupWithObjcCode.xcodeproj │ │ │ ├── project.pbxproj │ │ │ └── project.xcworkspace │ │ │ │ └── contents.xcworkspacedata │ │ └── SetupWithObjcCode │ │ │ ├── AppDelegate.h │ │ │ ├── AppDelegate.m │ │ │ ├── Assets.xcassets │ │ │ └── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ ├── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ │ ├── Info.plist │ │ │ ├── ViewController.h │ │ │ ├── ViewController.m │ │ │ └── main.m │ └── SetupWithSwiftCode │ │ ├── SetupWithSwiftCode.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ └── contents.xcworkspacedata │ │ └── SetupWithSwiftCode │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ │ ├── Info.plist │ │ └── ViewController.swift ├── SetupWithCode.md ├── Support Files │ └── Screenshots.key └── images │ ├── setup_finished.png │ ├── setup_first_run.png │ └── setup_jump_bar.png ├── 03.SetupWithStoryboards ├── Sample Code │ ├── SetupWithObjcStoryboards │ │ ├── SetupWithObjcStoryboards.xcodeproj │ │ │ ├── project.pbxproj │ │ │ └── project.xcworkspace │ │ │ │ └── contents.xcworkspacedata │ │ └── SetupWithObjcStoryboards │ │ │ ├── AppDelegate.h │ │ │ ├── AppDelegate.m │ │ │ ├── Assets.xcassets │ │ │ └── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ ├── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ │ ├── Info.plist │ │ │ ├── ViewController.h │ │ │ ├── ViewController.m │ │ │ └── main.m │ └── SetupWithSwiftStoryboards │ │ ├── SetupWithSwiftStoryboards.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ └── contents.xcworkspacedata │ │ └── SetupWithSwiftStoryboards │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ │ ├── Info.plist │ │ └── ViewController.swift ├── SetupWithStoryboards.md ├── Support Files │ └── Screenshots.key └── images │ ├── storyboard_connections_panel.png │ ├── storyboards_assistant_editor.png │ ├── storyboards_connect_outlet.png │ ├── storyboards_connections_complete.png │ ├── storyboards_constraints.png │ ├── storyboards_drag_connect_delegate.png │ ├── storyboards_drag_connect_outlet.png │ ├── storyboards_drag_table.png │ ├── storyboards_initial.png │ ├── storyboards_primary_editor.png │ └── storyboards_table_style.png ├── 04.SetupWithInterfaceBuilder ├── Sample Code │ ├── SetupWithObjcIB │ │ ├── SetupWithObjcIB.xcodeproj │ │ │ ├── project.pbxproj │ │ │ └── project.xcworkspace │ │ │ │ └── contents.xcworkspacedata │ │ └── SetupWithObjcIB │ │ │ ├── AppDelegate.h │ │ │ ├── AppDelegate.m │ │ │ ├── Assets.xcassets │ │ │ └── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ ├── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ │ ├── CustomViewController.h │ │ │ ├── CustomViewController.m │ │ │ ├── CustomViewController.xib │ │ │ ├── Info.plist │ │ │ ├── ViewController.h │ │ │ ├── ViewController.m │ │ │ └── main.m │ └── SetupWithSwiftIB │ │ ├── SetupWithSwiftIB.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ └── contents.xcworkspacedata │ │ └── SetupWithSwiftIB │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ │ ├── CustomViewController.swift │ │ ├── CustomViewController.xib │ │ ├── Info.plist │ │ └── ViewController.swift ├── SetupWithInterfaceBuilder.md ├── Support Files │ └── Screenshots.key └── images │ ├── ib_button_action.png │ ├── ib_connect_delegate.png │ ├── ib_new_file.png │ └── ib_new_file_2.png ├── 05.UITableViewController ├── Sample Code │ ├── TVCObjc │ │ ├── TVCObjc.xcodeproj │ │ │ ├── project.pbxproj │ │ │ └── project.xcworkspace │ │ │ │ └── contents.xcworkspacedata │ │ └── TVCObjc │ │ │ ├── AppDelegate.h │ │ │ ├── AppDelegate.m │ │ │ ├── Assets.xcassets │ │ │ └── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ ├── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ │ ├── CustomTableViewController.h │ │ │ ├── CustomTableViewController.m │ │ │ ├── Info.plist │ │ │ ├── ViewController.h │ │ │ ├── ViewController.m │ │ │ └── main.m │ └── TVCSwift │ │ ├── TVCSwift.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ └── contents.xcworkspacedata │ │ └── TVCSwift │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ │ ├── CustomTableViewController.swift │ │ ├── Info.plist │ │ └── ViewController.swift └── UITableViewController.md ├── 06.UITableViewCell ├── Sample Code │ ├── CellStylesObjc │ │ ├── CellStylesObjc.xcodeproj │ │ │ ├── project.pbxproj │ │ │ └── project.xcworkspace │ │ │ │ └── contents.xcworkspacedata │ │ └── CellStylesObjc │ │ │ ├── AppDelegate.h │ │ │ ├── AppDelegate.m │ │ │ ├── Assets.xcassets │ │ │ └── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ ├── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ │ ├── Info.plist │ │ │ ├── ViewController.h │ │ │ ├── ViewController.m │ │ │ └── main.m │ ├── CellStylesSwift │ │ ├── CellStylesSwift.xcodeproj │ │ │ ├── project.pbxproj │ │ │ └── project.xcworkspace │ │ │ │ └── contents.xcworkspacedata │ │ └── CellStylesSwift │ │ │ ├── AppDelegate.swift │ │ │ ├── Assets.xcassets │ │ │ └── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ ├── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ │ ├── Info.plist │ │ │ └── ViewController.swift │ ├── image.png │ ├── image@2x.png │ └── image@3x.png ├── Support Files │ └── Screenshots.key ├── UITableViewCell.md └── images │ ├── cell_accessories.png │ ├── cell_accessory_view.png │ ├── cell_imageview.png │ ├── cell_styles.png │ └── cell_styles_2.png ├── 07.CellReuse ├── CellReuse.md ├── Sample Code │ ├── CellReuseObjc │ │ ├── CellReuseObjc.xcodeproj │ │ │ ├── project.pbxproj │ │ │ └── project.xcworkspace │ │ │ │ └── contents.xcworkspacedata │ │ └── CellReuseObjc │ │ │ ├── AppDelegate.h │ │ │ ├── AppDelegate.m │ │ │ ├── Assets.xcassets │ │ │ └── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ ├── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ │ ├── Info.plist │ │ │ ├── ViewController.h │ │ │ ├── ViewController.m │ │ │ └── main.m │ └── CellReuseSwift │ │ ├── CellReuseSwift.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ └── contents.xcworkspacedata │ │ └── CellReuseSwift │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ │ ├── Info.plist │ │ └── ViewController.swift ├── Support Files │ └── Screenshots.key └── images │ └── cell_reuse_checkmarks.png ├── 08.BasicDataStructure ├── BasicDataStructure.md └── Sample Code │ ├── BasicDataStructureObjc │ ├── BasicDataStructureObjc.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ └── contents.xcworkspacedata │ └── BasicDataStructureObjc │ │ ├── AppDelegate.h │ │ ├── AppDelegate.m │ │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ │ ├── Info.plist │ │ ├── ViewController.h │ │ ├── ViewController.m │ │ └── main.m │ └── BasicDataStructureSwift │ ├── BasicDataStructureSwift.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── BasicDataStructureSwift │ ├── AppDelegate.swift │ ├── Assets.xcassets │ └── AppIcon.appiconset │ │ └── Contents.json │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── Info.plist │ └── ViewController.swift ├── 09.HandlingRowTaps ├── HandlingRowTaps.md └── Sample Code │ ├── HandlingRowTapsObjc │ ├── HandlingRowTapsObjc.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ └── contents.xcworkspacedata │ └── HandlingRowTapsObjc │ │ ├── AppDelegate.h │ │ ├── AppDelegate.m │ │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ │ ├── Info.plist │ │ ├── ViewController.h │ │ ├── ViewController.m │ │ └── main.m │ └── HandlingRowTapsSwift │ ├── HandlingRowTapsSwift.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── HandlingRowTapsSwift │ ├── AppDelegate.swift │ ├── Assets.xcassets │ └── AppIcon.appiconset │ │ └── Contents.json │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── Info.plist │ └── ViewController.swift ├── 10.DeletingRows ├── DeletingRows.md ├── Sample Code │ ├── DeletingRowsObjc │ │ ├── DeletingRowsObjc.xcodeproj │ │ │ ├── project.pbxproj │ │ │ └── project.xcworkspace │ │ │ │ └── contents.xcworkspacedata │ │ └── DeletingRowsObjc │ │ │ ├── AppDelegate.h │ │ │ ├── AppDelegate.m │ │ │ ├── Assets.xcassets │ │ │ └── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ ├── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ │ ├── Info.plist │ │ │ ├── ViewController.h │ │ │ ├── ViewController.m │ │ │ └── main.m │ └── DeletingRowsSwift │ │ ├── DeletingRowsSwift.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ └── contents.xcworkspacedata │ │ └── DeletingRowsSwift │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ │ ├── Info.plist │ │ └── ViewController.swift ├── Support Files │ └── Screenshots.key └── images │ └── deleting_swiped.png ├── 11.EditingMode ├── EditingMode.md ├── Sample Code │ ├── EditingModeObjc │ │ ├── EditingModeObjc.xcodeproj │ │ │ ├── project.pbxproj │ │ │ └── project.xcworkspace │ │ │ │ └── contents.xcworkspacedata │ │ └── EditingModeObjc │ │ │ ├── AppDelegate.h │ │ │ ├── AppDelegate.m │ │ │ ├── Assets.xcassets │ │ │ └── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ ├── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ │ ├── Info.plist │ │ │ ├── ViewController.h │ │ │ ├── ViewController.m │ │ │ └── main.m │ └── EditingModeSwift │ │ ├── EditingModeSwift.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ └── contents.xcworkspacedata │ │ └── EditingModeSwift │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ │ ├── Info.plist │ │ └── ViewController.swift ├── Support Files │ └── Screenshots.key └── images │ ├── editing_accessories.png │ ├── editing_editbuttonitem.png │ ├── editing_editingmodeon.png │ ├── editing_setup.png │ └── editing_styles.png ├── 12.AddingRows ├── AddingRows.md ├── Sample Code │ ├── AddingRowsObjc │ │ ├── AddingRowsObjc.xcodeproj │ │ │ ├── project.pbxproj │ │ │ └── project.xcworkspace │ │ │ │ └── contents.xcworkspacedata │ │ └── AddingRowsObjc │ │ │ ├── AppDelegate.h │ │ │ ├── AppDelegate.m │ │ │ ├── Assets.xcassets │ │ │ └── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ ├── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ │ ├── Info.plist │ │ │ ├── ViewController.h │ │ │ ├── ViewController.m │ │ │ └── main.m │ └── AddingRowsSwift │ │ ├── AddingRowsSwift.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ └── contents.xcworkspacedata │ │ └── AddingRowsSwift │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ │ ├── Info.plist │ │ └── ViewController.swift ├── Support Files │ └── Screenshots.key └── images │ └── adding_setup.png ├── 13.ReorderingRows ├── ReorderingRows.md ├── Sample Code │ ├── ReorderingRowsObjc │ │ ├── ReorderingRowsObjc.xcodeproj │ │ │ ├── project.pbxproj │ │ │ └── project.xcworkspace │ │ │ │ └── contents.xcworkspacedata │ │ └── ReorderingRowsObjc │ │ │ ├── AppDelegate.h │ │ │ ├── AppDelegate.m │ │ │ ├── Assets.xcassets │ │ │ └── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ ├── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ │ ├── Info.plist │ │ │ ├── ViewController.h │ │ │ ├── ViewController.m │ │ │ └── main.m │ └── ReorderingRowsSwift │ │ ├── ReorderingRowsSwift.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ └── contents.xcworkspacedata │ │ └── ReorderingRowsSwift │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ │ ├── Info.plist │ │ └── ViewController.swift ├── Support Files │ └── Screenshots.key └── images │ ├── reordering_no_source_drag.png │ ├── reordering_no_target_drag.png │ └── reordering_setup.png ├── 14.MultipleRowSelection ├── MultipleRowSelection.md ├── Sample Code │ ├── MultipleCheckmarksObjc │ │ ├── MultipleCheckmarksObjc.xcodeproj │ │ │ ├── project.pbxproj │ │ │ └── project.xcworkspace │ │ │ │ └── contents.xcworkspacedata │ │ └── MultipleCheckmarksObjc │ │ │ ├── AppDelegate.h │ │ │ ├── AppDelegate.m │ │ │ ├── Assets.xcassets │ │ │ └── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ ├── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ │ ├── Info.plist │ │ │ ├── ViewController.h │ │ │ ├── ViewController.m │ │ │ └── main.m │ ├── MultipleCheckmarksSwift │ │ ├── MultipleCheckmarksSwift.xcodeproj │ │ │ ├── project.pbxproj │ │ │ └── project.xcworkspace │ │ │ │ └── contents.xcworkspacedata │ │ └── MultipleCheckmarksSwift │ │ │ ├── AppDelegate.swift │ │ │ ├── Assets.xcassets │ │ │ └── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ ├── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ │ ├── Info.plist │ │ │ └── ViewController.swift │ ├── MultipleDeleteObjc │ │ ├── MultipleDeleteObjc.xcodeproj │ │ │ ├── project.pbxproj │ │ │ └── project.xcworkspace │ │ │ │ └── contents.xcworkspacedata │ │ └── MultipleDeleteObjc │ │ │ ├── AppDelegate.h │ │ │ ├── AppDelegate.m │ │ │ ├── Assets.xcassets │ │ │ └── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ ├── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ │ ├── Info.plist │ │ │ ├── ViewController.h │ │ │ ├── ViewController.m │ │ │ └── main.m │ └── MultipleDeleteSwift │ │ ├── MultipleDeleteSwift.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ └── contents.xcworkspacedata │ │ └── MultipleDeleteSwift │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ │ ├── Info.plist │ │ └── ViewController.swift ├── Support Files │ └── Screenshots.key └── images │ ├── multiple_selection_checkmarks.png │ ├── multiple_selection_deleting_setup.png │ ├── multiple_selection_edit_mode.png │ └── multiple_selection_ib_settings.png ├── 15.SectionHeadersFooters ├── Sample Code │ ├── SectionHeadersObjc │ │ ├── SectionHeadersObjc.xcodeproj │ │ │ ├── project.pbxproj │ │ │ └── project.xcworkspace │ │ │ │ └── contents.xcworkspacedata │ │ └── SectionHeadersObjc │ │ │ ├── AppDelegate.h │ │ │ ├── AppDelegate.m │ │ │ ├── Assets.xcassets │ │ │ └── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ ├── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ │ ├── Info.plist │ │ │ ├── ViewController.h │ │ │ ├── ViewController.m │ │ │ └── main.m │ └── SectionHeadersSwift │ │ ├── SectionHeadersSwift.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ └── contents.xcworkspacedata │ │ └── SectionHeadersSwift │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ │ ├── Info.plist │ │ └── ViewController.swift ├── SectionHeadersFooters.md ├── Support Files │ └── Screenshots.key └── images │ ├── headers_custom_1.png │ ├── headers_custom_2.png │ ├── headers_footers_full.png │ └── headers_standard_full.png ├── 16.SectionsBasicDataStructure ├── Sample Code │ ├── SectionsStructureObjc │ │ ├── SectionsStructureObjc.xcodeproj │ │ │ ├── project.pbxproj │ │ │ └── project.xcworkspace │ │ │ │ └── contents.xcworkspacedata │ │ └── SectionsStructureObjc │ │ │ ├── AppDelegate.h │ │ │ ├── AppDelegate.m │ │ │ ├── Assets.xcassets │ │ │ └── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ ├── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ │ ├── Info.plist │ │ │ ├── ViewController.h │ │ │ ├── ViewController.m │ │ │ └── main.m │ └── SectionsStructureSwift │ │ ├── SectionsStructureSwift.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ └── contents.xcworkspacedata │ │ └── SectionsStructureSwift │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ │ ├── Info.plist │ │ └── ViewController.swift └── SectionsBasicDataStructure.md ├── 17.SectionsAnotherBasicDataStructure ├── Sample Code │ ├── AnotherSectionsStructureObjc │ │ ├── AnotherSectionsStructureObjc.xcodeproj │ │ │ ├── project.pbxproj │ │ │ └── project.xcworkspace │ │ │ │ └── contents.xcworkspacedata │ │ └── AnotherSectionsStructureObjc │ │ │ ├── AppDelegate.h │ │ │ ├── AppDelegate.m │ │ │ ├── Assets.xcassets │ │ │ └── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ ├── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ │ ├── Info.plist │ │ │ ├── ViewController.h │ │ │ ├── ViewController.m │ │ │ └── main.m │ └── AnotherSectionsStructureSwift │ │ ├── AnotherSectionsStructureSwift.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ └── contents.xcworkspacedata │ │ └── AnotherSectionsStructureSwift │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ │ ├── Info.plist │ │ └── ViewController.swift └── SectionsAnotherBasicDataStructure.md ├── 18.SectionsCustomModelObjects ├── Sample Code │ ├── SectionsCustomModelObjc │ │ ├── SectionsCustomModelObjc.xcodeproj │ │ │ ├── project.pbxproj │ │ │ └── project.xcworkspace │ │ │ │ └── contents.xcworkspacedata │ │ └── SectionsCustomModelObjc │ │ │ ├── AppDelegate.h │ │ │ ├── AppDelegate.m │ │ │ ├── Assets.xcassets │ │ │ └── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ ├── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ │ ├── Info.plist │ │ │ ├── Models.h │ │ │ ├── Models.m │ │ │ ├── ViewController.h │ │ │ ├── ViewController.m │ │ │ └── main.m │ └── SectionsCustomModelSwift │ │ ├── SectionsCustomModelSwift.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ └── contents.xcworkspacedata │ │ └── SectionsCustomModelSwift │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ │ ├── Info.plist │ │ ├── Models.swift │ │ └── ViewController.swift ├── SectionsCustomModelObjects.md ├── Support Files │ └── Screenshots.key └── images │ ├── sections_footer.png │ └── sections_table_colors.png ├── 19.SectionsDataProcessing ├── Sample Code │ ├── SectionsDataProcessingObjc │ │ ├── SectionsDataProcessingObjc.xcodeproj │ │ │ ├── project.pbxproj │ │ │ └── project.xcworkspace │ │ │ │ └── contents.xcworkspacedata │ │ └── SectionsDataProcessingObjc │ │ │ ├── AppDelegate.h │ │ │ ├── AppDelegate.m │ │ │ ├── Assets.xcassets │ │ │ └── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ ├── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ │ ├── Info.plist │ │ │ ├── ViewController.h │ │ │ ├── ViewController.m │ │ │ └── main.m │ └── SectionsDataProcessingSwift │ │ ├── SectionsDataProcessingSwift.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ └── contents.xcworkspacedata │ │ └── SectionsDataProcessingSwift │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ │ ├── Info.plist │ │ └── ViewController.swift └── SectionsDataProcessing.md ├── 20.SectionIndexTitles ├── Sample Code │ ├── SectionIndexTitlesObjc │ │ ├── SectionIndexTitlesObjc.xcodeproj │ │ │ ├── project.pbxproj │ │ │ └── project.xcworkspace │ │ │ │ └── contents.xcworkspacedata │ │ └── SectionIndexTitlesObjc │ │ │ ├── AppDelegate.h │ │ │ ├── AppDelegate.m │ │ │ ├── Assets.xcassets │ │ │ └── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ ├── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ │ ├── Info.plist │ │ │ ├── ViewController.h │ │ │ ├── ViewController.m │ │ │ └── main.m │ └── SectionIndexTitlesSwift │ │ ├── SectionIndexTitlesSwift.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ └── contents.xcworkspacedata │ │ └── SectionIndexTitlesSwift │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ │ ├── Info.plist │ │ └── ViewController.swift ├── SectionIndexTitles.md ├── Support Files │ └── Screenshots.key └── images │ ├── index_titles_contacts.png │ ├── index_titles_narrower.png │ └── index_titles_too_wide.png └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | build/ 4 | *.pbxuser 5 | !default.pbxuser 6 | *.mode1v3 7 | !default.mode1v3 8 | *.mode2v3 9 | !default.mode2v3 10 | *.perspectivev3 11 | !default.perspectivev3 12 | xcuserdata 13 | *.xccheckout 14 | *.moved-aside 15 | DerivedData 16 | *.hmap 17 | *.ipa 18 | *.xcuserstate 19 | 20 | # CocoaPods 21 | # 22 | # We recommend against adding the Pods directory to your .gitignore. However 23 | # you should judge for yourself, the pros and cons are mentioned at: 24 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 25 | # 26 | #Pods/ 27 | -------------------------------------------------------------------------------- /01.Concepts/Support Files/ConceptScreenshot1/ConceptScreenshot1.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /01.Concepts/Support Files/ConceptScreenshot1/ConceptScreenshot1/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /01.Concepts/Support Files/ConceptScreenshot1/ConceptScreenshot1/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /01.Concepts/Support Files/ConceptScreenshot2/ConceptScreenshot2.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /01.Concepts/Support Files/ConceptScreenshot2/ConceptScreenshot2/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /01.Concepts/Support Files/ConceptScreenshot2/ConceptScreenshot2/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /01.Concepts/Support Files/ConceptScreenshot2/ConceptScreenshot2/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // ConceptScreenshot2 4 | // 5 | // Created by Brian Slick on 12/23/15. 6 | // Copyright © 2015 Brian Slick. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 12 | 13 | @IBOutlet weak var tableView: UITableView! 14 | 15 | override func viewDidLoad() { 16 | super.viewDidLoad() 17 | // Do any additional setup after loading the view, typically from a nib. 18 | } 19 | 20 | override func didReceiveMemoryWarning() { 21 | super.didReceiveMemoryWarning() 22 | // Dispose of any resources that can be recreated. 23 | } 24 | 25 | func numberOfSectionsInTableView(tableView: UITableView) -> Int { 26 | return 5 27 | } 28 | 29 | func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 30 | return section + 1 31 | } 32 | 33 | func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 34 | return "Section \(section)" 35 | } 36 | 37 | func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 38 | let cell = UITableViewCell.init(style: .Default, reuseIdentifier: "blah") 39 | cell.textLabel?.text = "Row \(indexPath.row)" 40 | return cell 41 | } 42 | } 43 | 44 | -------------------------------------------------------------------------------- /01.Concepts/Support Files/Screenshots.key: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/01.Concepts/Support Files/Screenshots.key -------------------------------------------------------------------------------- /01.Concepts/images/concepts_indexpath.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/01.Concepts/images/concepts_indexpath.png -------------------------------------------------------------------------------- /01.Concepts/images/concepts_table_styles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/01.Concepts/images/concepts_table_styles.png -------------------------------------------------------------------------------- /01.Concepts/images/concepts_terms.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/01.Concepts/images/concepts_terms.png -------------------------------------------------------------------------------- /02.SetupWithCode/Sample Code/SetupWithObjcCode/SetupWithObjcCode.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /02.SetupWithCode/Sample Code/SetupWithObjcCode/SetupWithObjcCode/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // SetupWithObjcCode 4 | // 5 | // Created by Brian Slick on 1/5/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /02.SetupWithCode/Sample Code/SetupWithObjcCode/SetupWithObjcCode/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /02.SetupWithCode/Sample Code/SetupWithObjcCode/SetupWithObjcCode/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /02.SetupWithCode/Sample Code/SetupWithObjcCode/SetupWithObjcCode/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /02.SetupWithCode/Sample Code/SetupWithObjcCode/SetupWithObjcCode/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // SetupWithObjcCode 4 | // 5 | // Created by Brian Slick on 1/5/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /02.SetupWithCode/Sample Code/SetupWithObjcCode/SetupWithObjcCode/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // SetupWithObjcCode 4 | // 5 | // Created by Brian Slick on 1/5/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /02.SetupWithCode/Sample Code/SetupWithSwiftCode/SetupWithSwiftCode.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /02.SetupWithCode/Sample Code/SetupWithSwiftCode/SetupWithSwiftCode/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /02.SetupWithCode/Sample Code/SetupWithSwiftCode/SetupWithSwiftCode/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /02.SetupWithCode/Sample Code/SetupWithSwiftCode/SetupWithSwiftCode/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /02.SetupWithCode/Support Files/Screenshots.key: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/02.SetupWithCode/Support Files/Screenshots.key -------------------------------------------------------------------------------- /02.SetupWithCode/images/setup_finished.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/02.SetupWithCode/images/setup_finished.png -------------------------------------------------------------------------------- /02.SetupWithCode/images/setup_first_run.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/02.SetupWithCode/images/setup_first_run.png -------------------------------------------------------------------------------- /02.SetupWithCode/images/setup_jump_bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/02.SetupWithCode/images/setup_jump_bar.png -------------------------------------------------------------------------------- /03.SetupWithStoryboards/Sample Code/SetupWithObjcStoryboards/SetupWithObjcStoryboards.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /03.SetupWithStoryboards/Sample Code/SetupWithObjcStoryboards/SetupWithObjcStoryboards/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // SetupWithObjcStoryboards 4 | // 5 | // Created by Brian Slick on 1/6/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /03.SetupWithStoryboards/Sample Code/SetupWithObjcStoryboards/SetupWithObjcStoryboards/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /03.SetupWithStoryboards/Sample Code/SetupWithObjcStoryboards/SetupWithObjcStoryboards/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /03.SetupWithStoryboards/Sample Code/SetupWithObjcStoryboards/SetupWithObjcStoryboards/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // SetupWithObjcStoryboards 4 | // 5 | // Created by Brian Slick on 1/6/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /03.SetupWithStoryboards/Sample Code/SetupWithObjcStoryboards/SetupWithObjcStoryboards/ViewController.m: -------------------------------------------------------------------------------- 1 | #import "ViewController.h" 2 | 3 | @interface ViewController () 4 | 5 | @property (weak, nonatomic) IBOutlet UITableView *tableView; 6 | 7 | @end 8 | 9 | @implementation ViewController 10 | 11 | #pragma mark - UITableViewDataSource Methods 12 | 13 | - (NSInteger)tableView:(UITableView *)tableView 14 | numberOfRowsInSection:(NSInteger)section 15 | { 16 | return 3; 17 | } 18 | 19 | - (UITableViewCell *)tableView:(UITableView *)tableView 20 | cellForRowAtIndexPath:(NSIndexPath *)indexPath 21 | { 22 | UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Default"]; 23 | 24 | [[cell textLabel] setText:@"Hello, World"]; 25 | 26 | return cell; 27 | } 28 | 29 | #pragma mark - UITableViewDelegate Methods 30 | 31 | - (void)tableView:(UITableView *)tableView 32 | didSelectRowAtIndexPath:(NSIndexPath *)indexPath 33 | { 34 | [tableView deselectRowAtIndexPath:indexPath animated:YES]; 35 | 36 | NSLog(@"Tapped row %ld", [indexPath row]); 37 | } 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /03.SetupWithStoryboards/Sample Code/SetupWithObjcStoryboards/SetupWithObjcStoryboards/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // SetupWithObjcStoryboards 4 | // 5 | // Created by Brian Slick on 1/6/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /03.SetupWithStoryboards/Sample Code/SetupWithSwiftStoryboards/SetupWithSwiftStoryboards.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /03.SetupWithStoryboards/Sample Code/SetupWithSwiftStoryboards/SetupWithSwiftStoryboards/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /03.SetupWithStoryboards/Sample Code/SetupWithSwiftStoryboards/SetupWithSwiftStoryboards/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /03.SetupWithStoryboards/Sample Code/SetupWithSwiftStoryboards/SetupWithSwiftStoryboards/ViewController.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate 4 | { 5 | @IBOutlet weak var tableView: UITableView! 6 | 7 | // MARK: - UITableViewDataSource Methods 8 | 9 | func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 10 | { 11 | return 3 12 | } 13 | 14 | func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 15 | { 16 | let cell = UITableViewCell.init(style: .Default, reuseIdentifier: "Default") 17 | 18 | cell.textLabel?.text = "Hello, World" 19 | 20 | return cell 21 | } 22 | 23 | // MARK: - UITableViewDelegate Methods 24 | 25 | func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 26 | { 27 | tableView.deselectRowAtIndexPath(indexPath, animated: true) 28 | 29 | print("Tapped row \(indexPath.row)") 30 | } 31 | } 32 | 33 | -------------------------------------------------------------------------------- /03.SetupWithStoryboards/Support Files/Screenshots.key: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/03.SetupWithStoryboards/Support Files/Screenshots.key -------------------------------------------------------------------------------- /03.SetupWithStoryboards/images/storyboard_connections_panel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/03.SetupWithStoryboards/images/storyboard_connections_panel.png -------------------------------------------------------------------------------- /03.SetupWithStoryboards/images/storyboards_assistant_editor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/03.SetupWithStoryboards/images/storyboards_assistant_editor.png -------------------------------------------------------------------------------- /03.SetupWithStoryboards/images/storyboards_connect_outlet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/03.SetupWithStoryboards/images/storyboards_connect_outlet.png -------------------------------------------------------------------------------- /03.SetupWithStoryboards/images/storyboards_connections_complete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/03.SetupWithStoryboards/images/storyboards_connections_complete.png -------------------------------------------------------------------------------- /03.SetupWithStoryboards/images/storyboards_constraints.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/03.SetupWithStoryboards/images/storyboards_constraints.png -------------------------------------------------------------------------------- /03.SetupWithStoryboards/images/storyboards_drag_connect_delegate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/03.SetupWithStoryboards/images/storyboards_drag_connect_delegate.png -------------------------------------------------------------------------------- /03.SetupWithStoryboards/images/storyboards_drag_connect_outlet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/03.SetupWithStoryboards/images/storyboards_drag_connect_outlet.png -------------------------------------------------------------------------------- /03.SetupWithStoryboards/images/storyboards_drag_table.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/03.SetupWithStoryboards/images/storyboards_drag_table.png -------------------------------------------------------------------------------- /03.SetupWithStoryboards/images/storyboards_initial.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/03.SetupWithStoryboards/images/storyboards_initial.png -------------------------------------------------------------------------------- /03.SetupWithStoryboards/images/storyboards_primary_editor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/03.SetupWithStoryboards/images/storyboards_primary_editor.png -------------------------------------------------------------------------------- /03.SetupWithStoryboards/images/storyboards_table_style.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/03.SetupWithStoryboards/images/storyboards_table_style.png -------------------------------------------------------------------------------- /04.SetupWithInterfaceBuilder/Sample Code/SetupWithObjcIB/SetupWithObjcIB.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /04.SetupWithInterfaceBuilder/Sample Code/SetupWithObjcIB/SetupWithObjcIB/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // SetupWithObjcIB 4 | // 5 | // Created by Brian Slick on 1/7/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /04.SetupWithInterfaceBuilder/Sample Code/SetupWithObjcIB/SetupWithObjcIB/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /04.SetupWithInterfaceBuilder/Sample Code/SetupWithObjcIB/SetupWithObjcIB/CustomViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // CustomViewController.h 3 | // SetupWithObjcIB 4 | // 5 | // Created by Brian Slick on 1/7/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface CustomViewController : UIViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /04.SetupWithInterfaceBuilder/Sample Code/SetupWithObjcIB/SetupWithObjcIB/CustomViewController.m: -------------------------------------------------------------------------------- 1 | #import "CustomViewController.h" 2 | 3 | @interface CustomViewController () 4 | 5 | @property (weak, nonatomic) IBOutlet UITableView *tableView; 6 | 7 | @end 8 | 9 | @implementation CustomViewController 10 | 11 | #pragma mark - UITableViewDataSource Methods 12 | 13 | - (NSInteger)tableView:(UITableView *)tableView 14 | numberOfRowsInSection:(NSInteger)section 15 | { 16 | return 3; 17 | } 18 | 19 | - (UITableViewCell *)tableView:(UITableView *)tableView 20 | cellForRowAtIndexPath:(NSIndexPath *)indexPath 21 | { 22 | UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Default"]; 23 | 24 | [[cell textLabel] setText:@"Hello, World"]; 25 | 26 | return cell; 27 | } 28 | 29 | #pragma mark - UITableViewDelegate Methods 30 | 31 | - (void)tableView:(UITableView *)tableView 32 | didSelectRowAtIndexPath:(NSIndexPath *)indexPath 33 | { 34 | [tableView deselectRowAtIndexPath:indexPath animated:YES]; 35 | 36 | NSLog(@"Tapped row %ld", [indexPath row]); 37 | } 38 | 39 | @end -------------------------------------------------------------------------------- /04.SetupWithInterfaceBuilder/Sample Code/SetupWithObjcIB/SetupWithObjcIB/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /04.SetupWithInterfaceBuilder/Sample Code/SetupWithObjcIB/SetupWithObjcIB/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // SetupWithObjcIB 4 | // 5 | // Created by Brian Slick on 1/7/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /04.SetupWithInterfaceBuilder/Sample Code/SetupWithObjcIB/SetupWithObjcIB/ViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.m 3 | // SetupWithObjcIB 4 | // 5 | // Created by Brian Slick on 1/7/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import "ViewController.h" 10 | #import "CustomViewController.h" 11 | 12 | @interface ViewController () 13 | 14 | @end 15 | 16 | @implementation ViewController 17 | 18 | - (void)viewDidLoad { 19 | [super viewDidLoad]; 20 | // Do any additional setup after loading the view, typically from a nib. 21 | } 22 | 23 | - (IBAction)showButtonPressed:(id)sender 24 | { 25 | CustomViewController *customViewController = [[CustomViewController alloc] init]; 26 | 27 | [self presentViewController:customViewController animated:YES completion:nil]; 28 | } 29 | 30 | - (void)didReceiveMemoryWarning { 31 | [super didReceiveMemoryWarning]; 32 | // Dispose of any resources that can be recreated. 33 | } 34 | 35 | @end 36 | -------------------------------------------------------------------------------- /04.SetupWithInterfaceBuilder/Sample Code/SetupWithObjcIB/SetupWithObjcIB/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // SetupWithObjcIB 4 | // 5 | // Created by Brian Slick on 1/7/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /04.SetupWithInterfaceBuilder/Sample Code/SetupWithSwiftIB/SetupWithSwiftIB.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /04.SetupWithInterfaceBuilder/Sample Code/SetupWithSwiftIB/SetupWithSwiftIB/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /04.SetupWithInterfaceBuilder/Sample Code/SetupWithSwiftIB/SetupWithSwiftIB/CustomViewController.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | class CustomViewController: UIViewController, UITableViewDataSource, UITableViewDelegate 4 | { 5 | @IBOutlet weak var tableView: UITableView! 6 | 7 | // MARK: - UITableViewDataSource Methods 8 | 9 | func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 10 | { 11 | return 3 12 | } 13 | 14 | func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 15 | { 16 | let cell = UITableViewCell.init(style: .Default, reuseIdentifier: "Default") 17 | 18 | cell.textLabel?.text = "Hello, World" 19 | 20 | return cell 21 | } 22 | 23 | // MARK: - UITableViewDelegate Methods 24 | 25 | func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 26 | { 27 | tableView.deselectRowAtIndexPath(indexPath, animated: true) 28 | 29 | print("Tapped row \(indexPath.row)") 30 | } 31 | } -------------------------------------------------------------------------------- /04.SetupWithInterfaceBuilder/Sample Code/SetupWithSwiftIB/SetupWithSwiftIB/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /04.SetupWithInterfaceBuilder/Sample Code/SetupWithSwiftIB/SetupWithSwiftIB/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // SetupWithSwiftIB 4 | // 5 | // Created by Brian Slick on 1/7/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class ViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | // Do any additional setup after loading the view, typically from a nib. 16 | } 17 | 18 | @IBAction func showButtonPressed(sender: AnyObject) 19 | { 20 | let customViewController = CustomViewController() 21 | presentViewController(customViewController, animated: true, completion: nil) 22 | } 23 | 24 | override func didReceiveMemoryWarning() { 25 | super.didReceiveMemoryWarning() 26 | // Dispose of any resources that can be recreated. 27 | } 28 | 29 | 30 | } 31 | 32 | -------------------------------------------------------------------------------- /04.SetupWithInterfaceBuilder/Support Files/Screenshots.key: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/04.SetupWithInterfaceBuilder/Support Files/Screenshots.key -------------------------------------------------------------------------------- /04.SetupWithInterfaceBuilder/images/ib_button_action.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/04.SetupWithInterfaceBuilder/images/ib_button_action.png -------------------------------------------------------------------------------- /04.SetupWithInterfaceBuilder/images/ib_connect_delegate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/04.SetupWithInterfaceBuilder/images/ib_connect_delegate.png -------------------------------------------------------------------------------- /04.SetupWithInterfaceBuilder/images/ib_new_file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/04.SetupWithInterfaceBuilder/images/ib_new_file.png -------------------------------------------------------------------------------- /04.SetupWithInterfaceBuilder/images/ib_new_file_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/04.SetupWithInterfaceBuilder/images/ib_new_file_2.png -------------------------------------------------------------------------------- /05.UITableViewController/Sample Code/TVCObjc/TVCObjc.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /05.UITableViewController/Sample Code/TVCObjc/TVCObjc/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // TVCObjc 4 | // 5 | // Created by Brian Slick on 1/7/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /05.UITableViewController/Sample Code/TVCObjc/TVCObjc/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /05.UITableViewController/Sample Code/TVCObjc/TVCObjc/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /05.UITableViewController/Sample Code/TVCObjc/TVCObjc/CustomTableViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // CustomTableViewController.h 3 | // TVCObjc 4 | // 5 | // Created by Brian Slick on 1/7/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface CustomTableViewController : UITableViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /05.UITableViewController/Sample Code/TVCObjc/TVCObjc/CustomTableViewController.m: -------------------------------------------------------------------------------- 1 | #import "CustomTableViewController.h" 2 | 3 | @interface CustomTableViewController () 4 | 5 | @end 6 | 7 | @implementation CustomTableViewController 8 | 9 | - (void)viewDidLoad 10 | { 11 | [super viewDidLoad]; 12 | 13 | NSLog(@"%@", self.view); 14 | NSLog(@"%@", self.tableView); 15 | 16 | UIView *subview = [[UIView alloc] initWithFrame:CGRectMake(50, 50, 100, 100)]; 17 | [subview setBackgroundColor:[UIColor redColor]]; 18 | [[self view] addSubview:subview]; 19 | } 20 | 21 | #pragma mark - UITableViewDataSource Methods 22 | 23 | - (NSInteger)tableView:(UITableView *)tableView 24 | numberOfRowsInSection:(NSInteger)section 25 | { 26 | return 3; 27 | } 28 | 29 | - (UITableViewCell *)tableView:(UITableView *)tableView 30 | cellForRowAtIndexPath:(NSIndexPath *)indexPath 31 | { 32 | UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Default"]; 33 | 34 | [[cell textLabel] setText:@"Hello, World"]; 35 | 36 | return cell; 37 | } 38 | 39 | #pragma mark - UITableViewDelegate Methods 40 | 41 | - (void)tableView:(UITableView *)tableView 42 | didSelectRowAtIndexPath:(NSIndexPath *)indexPath 43 | { 44 | [tableView deselectRowAtIndexPath:indexPath animated:YES]; 45 | 46 | NSLog(@"Tapped row %ld", [indexPath row]); 47 | } 48 | 49 | @end 50 | -------------------------------------------------------------------------------- /05.UITableViewController/Sample Code/TVCObjc/TVCObjc/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /05.UITableViewController/Sample Code/TVCObjc/TVCObjc/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // TVCObjc 4 | // 5 | // Created by Brian Slick on 1/7/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /05.UITableViewController/Sample Code/TVCObjc/TVCObjc/ViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.m 3 | // TVCObjc 4 | // 5 | // Created by Brian Slick on 1/7/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import "ViewController.h" 10 | #import "CustomTableViewController.h" 11 | 12 | @interface ViewController () 13 | 14 | @end 15 | 16 | @implementation ViewController 17 | 18 | - (void)viewDidLoad { 19 | [super viewDidLoad]; 20 | // Do any additional setup after loading the view, typically from a nib. 21 | } 22 | 23 | - (IBAction)showViewButtonPressed:(id)sender 24 | { 25 | CustomTableViewController *customTableViewController = [[CustomTableViewController alloc] initWithStyle:UITableViewStylePlain]; 26 | [self presentViewController:customTableViewController animated:YES completion:nil]; 27 | } 28 | 29 | - (void)didReceiveMemoryWarning { 30 | [super didReceiveMemoryWarning]; 31 | // Dispose of any resources that can be recreated. 32 | } 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /05.UITableViewController/Sample Code/TVCObjc/TVCObjc/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // TVCObjc 4 | // 5 | // Created by Brian Slick on 1/7/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /05.UITableViewController/Sample Code/TVCSwift/TVCSwift.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /05.UITableViewController/Sample Code/TVCSwift/TVCSwift/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /05.UITableViewController/Sample Code/TVCSwift/TVCSwift/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /05.UITableViewController/Sample Code/TVCSwift/TVCSwift/CustomTableViewController.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | class CustomTableViewController: UITableViewController 4 | { 5 | override func viewDidLoad() 6 | { 7 | super.viewDidLoad() 8 | 9 | print("\(view)") 10 | print("\(tableView)") 11 | 12 | let subview = UIView.init(frame: CGRectMake(50, 50, 100, 100)) 13 | subview.backgroundColor = UIColor.redColor() 14 | view.addSubview(subview) 15 | } 16 | 17 | // MARK: - UITableViewDataSource Methods 18 | 19 | override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 20 | { 21 | return 3 22 | } 23 | 24 | override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 25 | { 26 | let cell = UITableViewCell.init(style: .Default, reuseIdentifier: "Default") 27 | 28 | cell.textLabel?.text = "Hello, World" 29 | 30 | return cell 31 | } 32 | 33 | // MARK: - UITableViewDelegate Methods 34 | 35 | override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 36 | { 37 | tableView.deselectRowAtIndexPath(indexPath, animated: true) 38 | 39 | print("Tapped row \(indexPath.row)") 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /05.UITableViewController/Sample Code/TVCSwift/TVCSwift/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /05.UITableViewController/Sample Code/TVCSwift/TVCSwift/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // TVCSwift 4 | // 5 | // Created by Brian Slick on 1/7/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class ViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | // Do any additional setup after loading the view, typically from a nib. 16 | } 17 | 18 | @IBAction func showViewButtonPressed(sender: AnyObject) 19 | { 20 | let customTableViewController = CustomTableViewController(style: .Plain) 21 | presentViewController(customTableViewController, animated: true, completion: nil) 22 | } 23 | 24 | override func didReceiveMemoryWarning() { 25 | super.didReceiveMemoryWarning() 26 | // Dispose of any resources that can be recreated. 27 | } 28 | 29 | 30 | } 31 | 32 | -------------------------------------------------------------------------------- /06.UITableViewCell/Sample Code/CellStylesObjc/CellStylesObjc.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /06.UITableViewCell/Sample Code/CellStylesObjc/CellStylesObjc/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // CellStylesObjc 4 | // 5 | // Created by Brian Slick on 1/8/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /06.UITableViewCell/Sample Code/CellStylesObjc/CellStylesObjc/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /06.UITableViewCell/Sample Code/CellStylesObjc/CellStylesObjc/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /06.UITableViewCell/Sample Code/CellStylesObjc/CellStylesObjc/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // CellStylesObjc 4 | // 5 | // Created by Brian Slick on 1/8/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /06.UITableViewCell/Sample Code/CellStylesObjc/CellStylesObjc/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // CellStylesObjc 4 | // 5 | // Created by Brian Slick on 1/8/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /06.UITableViewCell/Sample Code/CellStylesSwift/CellStylesSwift.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /06.UITableViewCell/Sample Code/CellStylesSwift/CellStylesSwift/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /06.UITableViewCell/Sample Code/CellStylesSwift/CellStylesSwift/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /06.UITableViewCell/Sample Code/CellStylesSwift/CellStylesSwift/ViewController.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate 4 | { 5 | @IBOutlet weak var tableView: UITableView! 6 | 7 | // MARK: - UITableViewDataSource Methods 8 | 9 | func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 10 | { 11 | return 5 12 | } 13 | 14 | func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 15 | { 16 | var cell: UITableViewCell 17 | 18 | switch(indexPath.row) 19 | { 20 | case 1: 21 | cell = UITableViewCell(style: .Value1, reuseIdentifier: "Value1") 22 | cell.accessoryType = .DisclosureIndicator 23 | case 2: 24 | cell = UITableViewCell(style: .Value2, reuseIdentifier: "Value2") 25 | cell.accessoryType = .DetailDisclosureButton 26 | case 3: 27 | cell = UITableViewCell(style: .Subtitle, reuseIdentifier: "Subtitle") 28 | cell.accessoryType = .Checkmark 29 | case 4: 30 | cell = UITableViewCell(style: .Subtitle, reuseIdentifier: "Subtitle2") 31 | cell.textLabel?.text = "Hello" 32 | cell.accessoryType = .DetailButton 33 | return cell 34 | default: 35 | cell = UITableViewCell(style: .Default, reuseIdentifier: "Default") 36 | cell.accessoryType = .None 37 | } 38 | 39 | cell.textLabel?.text = "Hello" 40 | cell.detailTextLabel?.text = "World" 41 | cell.accessoryView = UISwitch() 42 | cell.imageView?.image = UIImage(named: "image") 43 | 44 | return cell 45 | } 46 | } 47 | 48 | -------------------------------------------------------------------------------- /06.UITableViewCell/Sample Code/image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/06.UITableViewCell/Sample Code/image.png -------------------------------------------------------------------------------- /06.UITableViewCell/Sample Code/image@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/06.UITableViewCell/Sample Code/image@2x.png -------------------------------------------------------------------------------- /06.UITableViewCell/Sample Code/image@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/06.UITableViewCell/Sample Code/image@3x.png -------------------------------------------------------------------------------- /06.UITableViewCell/Support Files/Screenshots.key: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/06.UITableViewCell/Support Files/Screenshots.key -------------------------------------------------------------------------------- /06.UITableViewCell/images/cell_accessories.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/06.UITableViewCell/images/cell_accessories.png -------------------------------------------------------------------------------- /06.UITableViewCell/images/cell_accessory_view.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/06.UITableViewCell/images/cell_accessory_view.png -------------------------------------------------------------------------------- /06.UITableViewCell/images/cell_imageview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/06.UITableViewCell/images/cell_imageview.png -------------------------------------------------------------------------------- /06.UITableViewCell/images/cell_styles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/06.UITableViewCell/images/cell_styles.png -------------------------------------------------------------------------------- /06.UITableViewCell/images/cell_styles_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/06.UITableViewCell/images/cell_styles_2.png -------------------------------------------------------------------------------- /07.CellReuse/Sample Code/CellReuseObjc/CellReuseObjc.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /07.CellReuse/Sample Code/CellReuseObjc/CellReuseObjc/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // CellReuseObjc 4 | // 5 | // Created by Brian Slick on 1/8/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /07.CellReuse/Sample Code/CellReuseObjc/CellReuseObjc/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /07.CellReuse/Sample Code/CellReuseObjc/CellReuseObjc/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /07.CellReuse/Sample Code/CellReuseObjc/CellReuseObjc/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /07.CellReuse/Sample Code/CellReuseObjc/CellReuseObjc/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // CellReuseObjc 4 | // 5 | // Created by Brian Slick on 1/8/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /07.CellReuse/Sample Code/CellReuseObjc/CellReuseObjc/ViewController.m: -------------------------------------------------------------------------------- 1 | #import "ViewController.h" 2 | 3 | @interface ViewController () 4 | 5 | @property (weak, nonatomic) IBOutlet UITableView *tableView; 6 | @property (nonatomic, assign) NSInteger numberOfCellsCreated; 7 | 8 | @end 9 | 10 | @implementation ViewController 11 | 12 | #pragma mark - UITableViewDataSource Methods 13 | 14 | - (NSInteger)tableView:(UITableView *)tableView 15 | numberOfRowsInSection:(NSInteger)section 16 | { 17 | return 50; 18 | } 19 | 20 | - (UITableViewCell *)tableView:(UITableView *)tableView 21 | cellForRowAtIndexPath:(NSIndexPath *)indexPath 22 | { 23 | static NSString *identifier = @"Default"; 24 | 25 | UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier]; 26 | if (cell == nil) 27 | { 28 | cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]; 29 | self.numberOfCellsCreated++; 30 | NSLog(@"Number of cells created: %ld", (long)self.numberOfCellsCreated); 31 | } 32 | 33 | [[cell textLabel] setText:@"Hello, World"]; 34 | 35 | if ([indexPath row] == 3) 36 | { 37 | [cell setAccessoryType:UITableViewCellAccessoryCheckmark]; 38 | } 39 | else 40 | { 41 | [cell setAccessoryType:UITableViewCellAccessoryNone]; 42 | } 43 | 44 | return cell; 45 | } 46 | 47 | @end 48 | -------------------------------------------------------------------------------- /07.CellReuse/Sample Code/CellReuseObjc/CellReuseObjc/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // CellReuseObjc 4 | // 5 | // Created by Brian Slick on 1/8/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /07.CellReuse/Sample Code/CellReuseSwift/CellReuseSwift.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /07.CellReuse/Sample Code/CellReuseSwift/CellReuseSwift/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /07.CellReuse/Sample Code/CellReuseSwift/CellReuseSwift/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /07.CellReuse/Sample Code/CellReuseSwift/CellReuseSwift/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /07.CellReuse/Sample Code/CellReuseSwift/CellReuseSwift/ViewController.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate 4 | { 5 | @IBOutlet weak var tableView: UITableView! 6 | var numberOfCellsCreated = 0 7 | 8 | // MARK: - UITableViewDataSource Methods 9 | 10 | func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 11 | { 12 | return 50 13 | } 14 | 15 | func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 16 | { 17 | let identifier = "Default" 18 | 19 | var optionalCell = tableView.dequeueReusableCellWithIdentifier(identifier) 20 | if (optionalCell == nil) 21 | { 22 | optionalCell = UITableViewCell.init(style: .Default, reuseIdentifier: identifier) 23 | numberOfCellsCreated++ 24 | print("Number of cells created: \(numberOfCellsCreated)") 25 | } 26 | 27 | // At this point, we are certain we have a cell. So let's map to a new variable so that we don't have to deal with the optional past this point. 28 | let cell = optionalCell! 29 | 30 | cell.textLabel?.text = "Hello, World" 31 | 32 | if indexPath.row == 3 33 | { 34 | cell.accessoryType = .Checkmark 35 | } 36 | else 37 | { 38 | cell.accessoryType = .None 39 | } 40 | 41 | return cell 42 | } 43 | } 44 | 45 | -------------------------------------------------------------------------------- /07.CellReuse/Support Files/Screenshots.key: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/07.CellReuse/Support Files/Screenshots.key -------------------------------------------------------------------------------- /07.CellReuse/images/cell_reuse_checkmarks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/07.CellReuse/images/cell_reuse_checkmarks.png -------------------------------------------------------------------------------- /08.BasicDataStructure/Sample Code/BasicDataStructureObjc/BasicDataStructureObjc.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /08.BasicDataStructure/Sample Code/BasicDataStructureObjc/BasicDataStructureObjc/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // BasicDataStructureObjc 4 | // 5 | // Created by Brian Slick on 1/10/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /08.BasicDataStructure/Sample Code/BasicDataStructureObjc/BasicDataStructureObjc/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /08.BasicDataStructure/Sample Code/BasicDataStructureObjc/BasicDataStructureObjc/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /08.BasicDataStructure/Sample Code/BasicDataStructureObjc/BasicDataStructureObjc/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // BasicDataStructureObjc 4 | // 5 | // Created by Brian Slick on 1/10/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /08.BasicDataStructure/Sample Code/BasicDataStructureObjc/BasicDataStructureObjc/ViewController.m: -------------------------------------------------------------------------------- 1 | #import "ViewController.h" 2 | 3 | @interface ViewController () 4 | 5 | @property (weak, nonatomic) IBOutlet UITableView *tableView; 6 | @property (nonatomic, strong) NSArray *contents; 7 | 8 | @end 9 | 10 | @implementation ViewController 11 | 12 | - (void)viewDidLoad 13 | { 14 | [super viewDidLoad]; 15 | 16 | [self setContents:@[ @"Red", @"Orange", @"Yellow", @"Green", @"Blue", @"Magenta"]]; 17 | } 18 | 19 | #pragma mark - UITableViewDataSource Methods 20 | 21 | - (NSInteger)tableView:(UITableView *)tableView 22 | numberOfRowsInSection:(NSInteger)section 23 | { 24 | return [[self contents] count]; 25 | } 26 | 27 | - (UITableViewCell *)tableView:(UITableView *)tableView 28 | cellForRowAtIndexPath:(NSIndexPath *)indexPath 29 | { 30 | static NSString *identifier = @"PlainCell"; 31 | 32 | UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier]; 33 | if (cell == nil) 34 | { 35 | cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]; 36 | } 37 | 38 | NSString *rowValue = [[self contents] objectAtIndex:[indexPath row]]; 39 | 40 | [[cell textLabel] setText:rowValue]; 41 | 42 | return cell; 43 | } 44 | 45 | #pragma mark - UITableViewDelegate Methods 46 | 47 | - (void)tableView:(UITableView *)tableView 48 | didSelectRowAtIndexPath:(NSIndexPath *)indexPath 49 | { 50 | [tableView deselectRowAtIndexPath:indexPath animated:YES]; 51 | 52 | NSString *rowValue = [[self contents] objectAtIndex:[indexPath row]]; 53 | 54 | NSLog(@"%@", rowValue); 55 | } 56 | 57 | @end 58 | -------------------------------------------------------------------------------- /08.BasicDataStructure/Sample Code/BasicDataStructureObjc/BasicDataStructureObjc/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // BasicDataStructureObjc 4 | // 5 | // Created by Brian Slick on 1/10/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /08.BasicDataStructure/Sample Code/BasicDataStructureSwift/BasicDataStructureSwift.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /08.BasicDataStructure/Sample Code/BasicDataStructureSwift/BasicDataStructureSwift/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /08.BasicDataStructure/Sample Code/BasicDataStructureSwift/BasicDataStructureSwift/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /08.BasicDataStructure/Sample Code/BasicDataStructureSwift/BasicDataStructureSwift/ViewController.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate 4 | { 5 | @IBOutlet weak var tableView: UITableView! 6 | var contents = [String]() 7 | 8 | override func viewDidLoad() 9 | { 10 | super.viewDidLoad() 11 | 12 | contents = [ "Red", "Orange", "Yellow", "Green", "Blue", "Magenta" ] 13 | } 14 | 15 | // MARK: - UITableViewDataSource Methods 16 | 17 | func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 18 | { 19 | return contents.count 20 | } 21 | 22 | func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 23 | { 24 | let identifier = "PlainCell" 25 | 26 | var optionalCell = tableView.dequeueReusableCellWithIdentifier(identifier) 27 | if (optionalCell == nil) 28 | { 29 | optionalCell = UITableViewCell.init(style: .Default, reuseIdentifier: identifier) 30 | } 31 | 32 | let cell = optionalCell! 33 | 34 | let rowValue = contents[indexPath.row]; 35 | 36 | cell.textLabel?.text = rowValue 37 | 38 | return cell 39 | } 40 | 41 | // MARK: - UITableViewDelegate Methods 42 | 43 | func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 44 | { 45 | tableView.deselectRowAtIndexPath(indexPath, animated: true) 46 | 47 | let rowValue = contents[indexPath.row]; 48 | 49 | print(rowValue) 50 | } 51 | } 52 | 53 | -------------------------------------------------------------------------------- /09.HandlingRowTaps/Sample Code/HandlingRowTapsObjc/HandlingRowTapsObjc.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /09.HandlingRowTaps/Sample Code/HandlingRowTapsObjc/HandlingRowTapsObjc/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // HandlingRowTapsObjc 4 | // 5 | // Created by Brian Slick on 1/11/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /09.HandlingRowTaps/Sample Code/HandlingRowTapsObjc/HandlingRowTapsObjc/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /09.HandlingRowTaps/Sample Code/HandlingRowTapsObjc/HandlingRowTapsObjc/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /09.HandlingRowTaps/Sample Code/HandlingRowTapsObjc/HandlingRowTapsObjc/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // HandlingRowTapsObjc 4 | // 5 | // Created by Brian Slick on 1/11/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /09.HandlingRowTaps/Sample Code/HandlingRowTapsObjc/HandlingRowTapsObjc/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // HandlingRowTapsObjc 4 | // 5 | // Created by Brian Slick on 1/11/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /09.HandlingRowTaps/Sample Code/HandlingRowTapsSwift/HandlingRowTapsSwift.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /09.HandlingRowTaps/Sample Code/HandlingRowTapsSwift/HandlingRowTapsSwift/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /09.HandlingRowTaps/Sample Code/HandlingRowTapsSwift/HandlingRowTapsSwift/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /10.DeletingRows/Sample Code/DeletingRowsObjc/DeletingRowsObjc.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /10.DeletingRows/Sample Code/DeletingRowsObjc/DeletingRowsObjc/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // DeletingRowsObjc 4 | // 5 | // Created by Brian Slick on 1/11/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /10.DeletingRows/Sample Code/DeletingRowsObjc/DeletingRowsObjc/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /10.DeletingRows/Sample Code/DeletingRowsObjc/DeletingRowsObjc/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /10.DeletingRows/Sample Code/DeletingRowsObjc/DeletingRowsObjc/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // DeletingRowsObjc 4 | // 5 | // Created by Brian Slick on 1/11/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /10.DeletingRows/Sample Code/DeletingRowsObjc/DeletingRowsObjc/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // DeletingRowsObjc 4 | // 5 | // Created by Brian Slick on 1/11/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /10.DeletingRows/Sample Code/DeletingRowsSwift/DeletingRowsSwift.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /10.DeletingRows/Sample Code/DeletingRowsSwift/DeletingRowsSwift/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /10.DeletingRows/Sample Code/DeletingRowsSwift/DeletingRowsSwift/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /10.DeletingRows/Support Files/Screenshots.key: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/10.DeletingRows/Support Files/Screenshots.key -------------------------------------------------------------------------------- /10.DeletingRows/images/deleting_swiped.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/10.DeletingRows/images/deleting_swiped.png -------------------------------------------------------------------------------- /11.EditingMode/Sample Code/EditingModeObjc/EditingModeObjc.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /11.EditingMode/Sample Code/EditingModeObjc/EditingModeObjc/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // EditingModeObjc 4 | // 5 | // Created by Brian Slick on 1/13/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /11.EditingMode/Sample Code/EditingModeObjc/EditingModeObjc/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /11.EditingMode/Sample Code/EditingModeObjc/EditingModeObjc/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /11.EditingMode/Sample Code/EditingModeObjc/EditingModeObjc/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /11.EditingMode/Sample Code/EditingModeObjc/EditingModeObjc/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // EditingModeObjc 4 | // 5 | // Created by Brian Slick on 1/13/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /11.EditingMode/Sample Code/EditingModeObjc/EditingModeObjc/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // EditingModeObjc 4 | // 5 | // Created by Brian Slick on 1/13/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /11.EditingMode/Sample Code/EditingModeSwift/EditingModeSwift.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /11.EditingMode/Sample Code/EditingModeSwift/EditingModeSwift/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /11.EditingMode/Sample Code/EditingModeSwift/EditingModeSwift/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /11.EditingMode/Support Files/Screenshots.key: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/11.EditingMode/Support Files/Screenshots.key -------------------------------------------------------------------------------- /11.EditingMode/images/editing_accessories.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/11.EditingMode/images/editing_accessories.png -------------------------------------------------------------------------------- /11.EditingMode/images/editing_editbuttonitem.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/11.EditingMode/images/editing_editbuttonitem.png -------------------------------------------------------------------------------- /11.EditingMode/images/editing_editingmodeon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/11.EditingMode/images/editing_editingmodeon.png -------------------------------------------------------------------------------- /11.EditingMode/images/editing_setup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/11.EditingMode/images/editing_setup.png -------------------------------------------------------------------------------- /11.EditingMode/images/editing_styles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/11.EditingMode/images/editing_styles.png -------------------------------------------------------------------------------- /12.AddingRows/Sample Code/AddingRowsObjc/AddingRowsObjc.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /12.AddingRows/Sample Code/AddingRowsObjc/AddingRowsObjc/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // AddingRowsObjc 4 | // 5 | // Created by Brian Slick on 1/13/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /12.AddingRows/Sample Code/AddingRowsObjc/AddingRowsObjc/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /12.AddingRows/Sample Code/AddingRowsObjc/AddingRowsObjc/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /12.AddingRows/Sample Code/AddingRowsObjc/AddingRowsObjc/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /12.AddingRows/Sample Code/AddingRowsObjc/AddingRowsObjc/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // AddingRowsObjc 4 | // 5 | // Created by Brian Slick on 1/13/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /12.AddingRows/Sample Code/AddingRowsObjc/AddingRowsObjc/ViewController.m: -------------------------------------------------------------------------------- 1 | #import "ViewController.h" 2 | 3 | @interface ViewController () 4 | 5 | @property (weak, nonatomic) IBOutlet UITableView *tableView; 6 | @property (nonatomic, strong) NSMutableArray *contents; 7 | 8 | @end 9 | 10 | @implementation ViewController 11 | 12 | - (void)viewDidLoad 13 | { 14 | [super viewDidLoad]; 15 | 16 | [self setContents:[@[ @"Red", @"Orange", @"Yellow", @"Green", @"Blue", @"Magenta"] mutableCopy]]; 17 | } 18 | 19 | - (IBAction)addButtonTapped:(UIButton *)sender 20 | { 21 | [[self contents] insertObject:@"Black" atIndex:0]; 22 | 23 | NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; 24 | 25 | [[self tableView] insertRowsAtIndexPaths:@[ indexPath ] withRowAnimation:UITableViewRowAnimationAutomatic]; 26 | } 27 | 28 | #pragma mark - UITableViewDataSource Methods 29 | 30 | - (NSInteger)tableView:(UITableView *)tableView 31 | numberOfRowsInSection:(NSInteger)section 32 | { 33 | return [[self contents] count]; 34 | } 35 | 36 | - (UITableViewCell *)tableView:(UITableView *)tableView 37 | cellForRowAtIndexPath:(NSIndexPath *)indexPath 38 | { 39 | static NSString *identifier = @"PlainCell"; 40 | 41 | UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier]; 42 | if (cell == nil) 43 | { 44 | cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]; 45 | } 46 | 47 | NSString *rowValue = [[self contents] objectAtIndex:[indexPath row]]; 48 | 49 | [[cell textLabel] setText:rowValue]; 50 | 51 | return cell; 52 | } 53 | 54 | @end -------------------------------------------------------------------------------- /12.AddingRows/Sample Code/AddingRowsObjc/AddingRowsObjc/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // AddingRowsObjc 4 | // 5 | // Created by Brian Slick on 1/13/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /12.AddingRows/Sample Code/AddingRowsSwift/AddingRowsSwift.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /12.AddingRows/Sample Code/AddingRowsSwift/AddingRowsSwift/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /12.AddingRows/Sample Code/AddingRowsSwift/AddingRowsSwift/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /12.AddingRows/Sample Code/AddingRowsSwift/AddingRowsSwift/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /12.AddingRows/Sample Code/AddingRowsSwift/AddingRowsSwift/ViewController.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate 4 | { 5 | @IBOutlet weak var tableView: UITableView! 6 | var contents = [String]() 7 | 8 | override func viewDidLoad() 9 | { 10 | super.viewDidLoad() 11 | 12 | contents = [ "Red", "Orange", "Yellow", "Green", "Blue", "Magenta" ] 13 | } 14 | 15 | @IBAction func addButtonTapped(sender: UIButton) 16 | { 17 | contents.insert("Black", atIndex: 0) 18 | 19 | let indexPath = NSIndexPath.init(forRow: 0, inSection: 0) 20 | 21 | tableView.insertRowsAtIndexPaths([ indexPath ], withRowAnimation: .Automatic) 22 | } 23 | 24 | // MARK: - UITableViewDataSource Methods 25 | 26 | func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 27 | { 28 | return contents.count 29 | } 30 | 31 | func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 32 | { 33 | let identifier = "PlainCell" 34 | 35 | var optionalCell = tableView.dequeueReusableCellWithIdentifier(identifier) 36 | if (optionalCell == nil) 37 | { 38 | optionalCell = UITableViewCell.init(style: .Default, reuseIdentifier: identifier) 39 | } 40 | 41 | let cell = optionalCell! 42 | 43 | let rowValue = contents[indexPath.row]; 44 | 45 | cell.textLabel?.text = rowValue 46 | 47 | return cell 48 | } 49 | } -------------------------------------------------------------------------------- /12.AddingRows/Support Files/Screenshots.key: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/12.AddingRows/Support Files/Screenshots.key -------------------------------------------------------------------------------- /12.AddingRows/images/adding_setup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/12.AddingRows/images/adding_setup.png -------------------------------------------------------------------------------- /13.ReorderingRows/Sample Code/ReorderingRowsObjc/ReorderingRowsObjc.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /13.ReorderingRows/Sample Code/ReorderingRowsObjc/ReorderingRowsObjc/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // ReorderingRowsObjc 4 | // 5 | // Created by Brian Slick on 1/14/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /13.ReorderingRows/Sample Code/ReorderingRowsObjc/ReorderingRowsObjc/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /13.ReorderingRows/Sample Code/ReorderingRowsObjc/ReorderingRowsObjc/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /13.ReorderingRows/Sample Code/ReorderingRowsObjc/ReorderingRowsObjc/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // ReorderingRowsObjc 4 | // 5 | // Created by Brian Slick on 1/14/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /13.ReorderingRows/Sample Code/ReorderingRowsObjc/ReorderingRowsObjc/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // ReorderingRowsObjc 4 | // 5 | // Created by Brian Slick on 1/14/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /13.ReorderingRows/Sample Code/ReorderingRowsSwift/ReorderingRowsSwift.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /13.ReorderingRows/Sample Code/ReorderingRowsSwift/ReorderingRowsSwift/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /13.ReorderingRows/Sample Code/ReorderingRowsSwift/ReorderingRowsSwift/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /13.ReorderingRows/Support Files/Screenshots.key: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/13.ReorderingRows/Support Files/Screenshots.key -------------------------------------------------------------------------------- /13.ReorderingRows/images/reordering_no_source_drag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/13.ReorderingRows/images/reordering_no_source_drag.png -------------------------------------------------------------------------------- /13.ReorderingRows/images/reordering_no_target_drag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/13.ReorderingRows/images/reordering_no_target_drag.png -------------------------------------------------------------------------------- /13.ReorderingRows/images/reordering_setup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/13.ReorderingRows/images/reordering_setup.png -------------------------------------------------------------------------------- /14.MultipleRowSelection/Sample Code/MultipleCheckmarksObjc/MultipleCheckmarksObjc.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /14.MultipleRowSelection/Sample Code/MultipleCheckmarksObjc/MultipleCheckmarksObjc/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // MultipleCheckmarksObjc 4 | // 5 | // Created by Brian Slick on 1/15/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /14.MultipleRowSelection/Sample Code/MultipleCheckmarksObjc/MultipleCheckmarksObjc/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /14.MultipleRowSelection/Sample Code/MultipleCheckmarksObjc/MultipleCheckmarksObjc/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /14.MultipleRowSelection/Sample Code/MultipleCheckmarksObjc/MultipleCheckmarksObjc/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // MultipleCheckmarksObjc 4 | // 5 | // Created by Brian Slick on 1/15/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /14.MultipleRowSelection/Sample Code/MultipleCheckmarksObjc/MultipleCheckmarksObjc/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // MultipleCheckmarksObjc 4 | // 5 | // Created by Brian Slick on 1/15/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /14.MultipleRowSelection/Sample Code/MultipleCheckmarksSwift/MultipleCheckmarksSwift.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /14.MultipleRowSelection/Sample Code/MultipleCheckmarksSwift/MultipleCheckmarksSwift/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /14.MultipleRowSelection/Sample Code/MultipleCheckmarksSwift/MultipleCheckmarksSwift/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /14.MultipleRowSelection/Sample Code/MultipleDeleteObjc/MultipleDeleteObjc.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /14.MultipleRowSelection/Sample Code/MultipleDeleteObjc/MultipleDeleteObjc/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // MultipleDeleteObjc 4 | // 5 | // Created by Brian Slick on 1/14/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /14.MultipleRowSelection/Sample Code/MultipleDeleteObjc/MultipleDeleteObjc/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /14.MultipleRowSelection/Sample Code/MultipleDeleteObjc/MultipleDeleteObjc/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /14.MultipleRowSelection/Sample Code/MultipleDeleteObjc/MultipleDeleteObjc/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // MultipleDeleteObjc 4 | // 5 | // Created by Brian Slick on 1/14/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /14.MultipleRowSelection/Sample Code/MultipleDeleteObjc/MultipleDeleteObjc/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // MultipleDeleteObjc 4 | // 5 | // Created by Brian Slick on 1/14/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /14.MultipleRowSelection/Sample Code/MultipleDeleteSwift/MultipleDeleteSwift.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /14.MultipleRowSelection/Sample Code/MultipleDeleteSwift/MultipleDeleteSwift/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /14.MultipleRowSelection/Sample Code/MultipleDeleteSwift/MultipleDeleteSwift/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /14.MultipleRowSelection/Support Files/Screenshots.key: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/14.MultipleRowSelection/Support Files/Screenshots.key -------------------------------------------------------------------------------- /14.MultipleRowSelection/images/multiple_selection_checkmarks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/14.MultipleRowSelection/images/multiple_selection_checkmarks.png -------------------------------------------------------------------------------- /14.MultipleRowSelection/images/multiple_selection_deleting_setup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/14.MultipleRowSelection/images/multiple_selection_deleting_setup.png -------------------------------------------------------------------------------- /14.MultipleRowSelection/images/multiple_selection_edit_mode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/14.MultipleRowSelection/images/multiple_selection_edit_mode.png -------------------------------------------------------------------------------- /14.MultipleRowSelection/images/multiple_selection_ib_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/14.MultipleRowSelection/images/multiple_selection_ib_settings.png -------------------------------------------------------------------------------- /15.SectionHeadersFooters/Sample Code/SectionHeadersObjc/SectionHeadersObjc.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /15.SectionHeadersFooters/Sample Code/SectionHeadersObjc/SectionHeadersObjc/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // SectionHeadersObjc 4 | // 5 | // Created by Brian Slick on 1/16/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /15.SectionHeadersFooters/Sample Code/SectionHeadersObjc/SectionHeadersObjc/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /15.SectionHeadersFooters/Sample Code/SectionHeadersObjc/SectionHeadersObjc/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /15.SectionHeadersFooters/Sample Code/SectionHeadersObjc/SectionHeadersObjc/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // SectionHeadersObjc 4 | // 5 | // Created by Brian Slick on 1/16/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /15.SectionHeadersFooters/Sample Code/SectionHeadersObjc/SectionHeadersObjc/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // SectionHeadersObjc 4 | // 5 | // Created by Brian Slick on 1/16/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /15.SectionHeadersFooters/Sample Code/SectionHeadersSwift/SectionHeadersSwift.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /15.SectionHeadersFooters/Sample Code/SectionHeadersSwift/SectionHeadersSwift/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /15.SectionHeadersFooters/Sample Code/SectionHeadersSwift/SectionHeadersSwift/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /15.SectionHeadersFooters/Support Files/Screenshots.key: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/15.SectionHeadersFooters/Support Files/Screenshots.key -------------------------------------------------------------------------------- /15.SectionHeadersFooters/images/headers_custom_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/15.SectionHeadersFooters/images/headers_custom_1.png -------------------------------------------------------------------------------- /15.SectionHeadersFooters/images/headers_custom_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/15.SectionHeadersFooters/images/headers_custom_2.png -------------------------------------------------------------------------------- /15.SectionHeadersFooters/images/headers_footers_full.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/15.SectionHeadersFooters/images/headers_footers_full.png -------------------------------------------------------------------------------- /15.SectionHeadersFooters/images/headers_standard_full.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/15.SectionHeadersFooters/images/headers_standard_full.png -------------------------------------------------------------------------------- /16.SectionsBasicDataStructure/Sample Code/SectionsStructureObjc/SectionsStructureObjc.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /16.SectionsBasicDataStructure/Sample Code/SectionsStructureObjc/SectionsStructureObjc/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // SectionsStructureObjc 4 | // 5 | // Created by Brian Slick on 1/19/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /16.SectionsBasicDataStructure/Sample Code/SectionsStructureObjc/SectionsStructureObjc/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /16.SectionsBasicDataStructure/Sample Code/SectionsStructureObjc/SectionsStructureObjc/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /16.SectionsBasicDataStructure/Sample Code/SectionsStructureObjc/SectionsStructureObjc/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // SectionsStructureObjc 4 | // 5 | // Created by Brian Slick on 1/19/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /16.SectionsBasicDataStructure/Sample Code/SectionsStructureObjc/SectionsStructureObjc/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // SectionsStructureObjc 4 | // 5 | // Created by Brian Slick on 1/19/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /16.SectionsBasicDataStructure/Sample Code/SectionsStructureSwift/SectionsStructureSwift.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /16.SectionsBasicDataStructure/Sample Code/SectionsStructureSwift/SectionsStructureSwift/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /16.SectionsBasicDataStructure/Sample Code/SectionsStructureSwift/SectionsStructureSwift/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /17.SectionsAnotherBasicDataStructure/Sample Code/AnotherSectionsStructureObjc/AnotherSectionsStructureObjc.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /17.SectionsAnotherBasicDataStructure/Sample Code/AnotherSectionsStructureObjc/AnotherSectionsStructureObjc/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // AnotherSectionsStructureObjc 4 | // 5 | // Created by Brian Slick on 1/21/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /17.SectionsAnotherBasicDataStructure/Sample Code/AnotherSectionsStructureObjc/AnotherSectionsStructureObjc/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /17.SectionsAnotherBasicDataStructure/Sample Code/AnotherSectionsStructureObjc/AnotherSectionsStructureObjc/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /17.SectionsAnotherBasicDataStructure/Sample Code/AnotherSectionsStructureObjc/AnotherSectionsStructureObjc/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // AnotherSectionsStructureObjc 4 | // 5 | // Created by Brian Slick on 1/21/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /17.SectionsAnotherBasicDataStructure/Sample Code/AnotherSectionsStructureObjc/AnotherSectionsStructureObjc/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // AnotherSectionsStructureObjc 4 | // 5 | // Created by Brian Slick on 1/21/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /17.SectionsAnotherBasicDataStructure/Sample Code/AnotherSectionsStructureSwift/AnotherSectionsStructureSwift.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /17.SectionsAnotherBasicDataStructure/Sample Code/AnotherSectionsStructureSwift/AnotherSectionsStructureSwift/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /17.SectionsAnotherBasicDataStructure/Sample Code/AnotherSectionsStructureSwift/AnotherSectionsStructureSwift/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /18.SectionsCustomModelObjects/Sample Code/SectionsCustomModelObjc/SectionsCustomModelObjc.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /18.SectionsCustomModelObjects/Sample Code/SectionsCustomModelObjc/SectionsCustomModelObjc/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // SectionsCustomModelObjc 4 | // 5 | // Created by Brian Slick on 1/21/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /18.SectionsCustomModelObjects/Sample Code/SectionsCustomModelObjc/SectionsCustomModelObjc/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /18.SectionsCustomModelObjects/Sample Code/SectionsCustomModelObjc/SectionsCustomModelObjc/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /18.SectionsCustomModelObjects/Sample Code/SectionsCustomModelObjc/SectionsCustomModelObjc/Models.h: -------------------------------------------------------------------------------- 1 | @import UIKit; 2 | 3 | @interface FoodItem : NSObject 4 | 5 | @property (nonatomic, copy) NSString *name; 6 | @property (nonatomic, copy) UIColor *color; 7 | 8 | - (id)initWithName:(NSString *)name color:(UIColor *)color; 9 | 10 | @end 11 | 12 | 13 | @interface SectionItem : NSObject 14 | 15 | @property (nonatomic, copy) NSString *sectionName; 16 | @property (nonatomic, copy) NSString *sectionFooter; 17 | @property (nonatomic, strong) NSMutableArray *sectionContents; 18 | 19 | @end -------------------------------------------------------------------------------- /18.SectionsCustomModelObjects/Sample Code/SectionsCustomModelObjc/SectionsCustomModelObjc/Models.m: -------------------------------------------------------------------------------- 1 | #import "Models.h" 2 | 3 | @implementation FoodItem 4 | 5 | - (id)initWithName:(NSString *)name 6 | color:(UIColor *)color 7 | { 8 | self = [super init]; 9 | if (self) 10 | { 11 | _name = name; 12 | _color = color; 13 | } 14 | return self; 15 | } 16 | 17 | @end 18 | 19 | 20 | @implementation SectionItem 21 | 22 | - (id)init 23 | { 24 | self = [super init]; 25 | if (self) 26 | { 27 | _sectionContents = [NSMutableArray array]; 28 | } 29 | return self; 30 | } 31 | 32 | @end -------------------------------------------------------------------------------- /18.SectionsCustomModelObjects/Sample Code/SectionsCustomModelObjc/SectionsCustomModelObjc/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // SectionsCustomModelObjc 4 | // 5 | // Created by Brian Slick on 1/21/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /18.SectionsCustomModelObjects/Sample Code/SectionsCustomModelObjc/SectionsCustomModelObjc/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // SectionsCustomModelObjc 4 | // 5 | // Created by Brian Slick on 1/21/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /18.SectionsCustomModelObjects/Sample Code/SectionsCustomModelSwift/SectionsCustomModelSwift.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /18.SectionsCustomModelObjects/Sample Code/SectionsCustomModelSwift/SectionsCustomModelSwift/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /18.SectionsCustomModelObjects/Sample Code/SectionsCustomModelSwift/SectionsCustomModelSwift/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /18.SectionsCustomModelObjects/Sample Code/SectionsCustomModelSwift/SectionsCustomModelSwift/Models.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | class FoodItem 4 | { 5 | var name = "" 6 | var color: UIColor? 7 | 8 | init(name: String, color: UIColor?) 9 | { 10 | self.name = name 11 | self.color = color 12 | } 13 | } 14 | 15 | class SectionItem 16 | { 17 | var sectionName: String? 18 | var sectionFooter: String? 19 | var sectionContents = [FoodItem]() 20 | } -------------------------------------------------------------------------------- /18.SectionsCustomModelObjects/Support Files/Screenshots.key: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/18.SectionsCustomModelObjects/Support Files/Screenshots.key -------------------------------------------------------------------------------- /18.SectionsCustomModelObjects/images/sections_footer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/18.SectionsCustomModelObjects/images/sections_footer.png -------------------------------------------------------------------------------- /18.SectionsCustomModelObjects/images/sections_table_colors.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/18.SectionsCustomModelObjects/images/sections_table_colors.png -------------------------------------------------------------------------------- /19.SectionsDataProcessing/Sample Code/SectionsDataProcessingObjc/SectionsDataProcessingObjc.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /19.SectionsDataProcessing/Sample Code/SectionsDataProcessingObjc/SectionsDataProcessingObjc/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // SectionsDataProcessingObjc 4 | // 5 | // Created by Brian Slick on 1/21/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /19.SectionsDataProcessing/Sample Code/SectionsDataProcessingObjc/SectionsDataProcessingObjc/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /19.SectionsDataProcessing/Sample Code/SectionsDataProcessingObjc/SectionsDataProcessingObjc/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /19.SectionsDataProcessing/Sample Code/SectionsDataProcessingObjc/SectionsDataProcessingObjc/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // SectionsDataProcessingObjc 4 | // 5 | // Created by Brian Slick on 1/21/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /19.SectionsDataProcessing/Sample Code/SectionsDataProcessingObjc/SectionsDataProcessingObjc/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // SectionsDataProcessingObjc 4 | // 5 | // Created by Brian Slick on 1/21/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /19.SectionsDataProcessing/Sample Code/SectionsDataProcessingSwift/SectionsDataProcessingSwift.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /19.SectionsDataProcessing/Sample Code/SectionsDataProcessingSwift/SectionsDataProcessingSwift/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /19.SectionsDataProcessing/Sample Code/SectionsDataProcessingSwift/SectionsDataProcessingSwift/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /20.SectionIndexTitles/Sample Code/SectionIndexTitlesObjc/SectionIndexTitlesObjc.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /20.SectionIndexTitles/Sample Code/SectionIndexTitlesObjc/SectionIndexTitlesObjc/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // SectionIndexTitlesObjc 4 | // 5 | // Created by Brian Slick on 2/21/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /20.SectionIndexTitles/Sample Code/SectionIndexTitlesObjc/SectionIndexTitlesObjc/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /20.SectionIndexTitles/Sample Code/SectionIndexTitlesObjc/SectionIndexTitlesObjc/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /20.SectionIndexTitles/Sample Code/SectionIndexTitlesObjc/SectionIndexTitlesObjc/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // SectionIndexTitlesObjc 4 | // 5 | // Created by Brian Slick on 2/21/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /20.SectionIndexTitles/Sample Code/SectionIndexTitlesObjc/SectionIndexTitlesObjc/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // SectionIndexTitlesObjc 4 | // 5 | // Created by Brian Slick on 2/21/16. 6 | // Copyright © 2016 Brian Slick. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /20.SectionIndexTitles/Sample Code/SectionIndexTitlesSwift/SectionIndexTitlesSwift.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /20.SectionIndexTitles/Sample Code/SectionIndexTitlesSwift/SectionIndexTitlesSwift/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /20.SectionIndexTitles/Sample Code/SectionIndexTitlesSwift/SectionIndexTitlesSwift/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /20.SectionIndexTitles/Support Files/Screenshots.key: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/20.SectionIndexTitles/Support Files/Screenshots.key -------------------------------------------------------------------------------- /20.SectionIndexTitles/images/index_titles_contacts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/20.SectionIndexTitles/images/index_titles_contacts.png -------------------------------------------------------------------------------- /20.SectionIndexTitles/images/index_titles_narrower.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/20.SectionIndexTitles/images/index_titles_narrower.png -------------------------------------------------------------------------------- /20.SectionIndexTitles/images/index_titles_too_wide.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrianSlick/Book-UITableViewGuide/d465b31ba3751bc7debb98f01be75a0d0c23d904/20.SectionIndexTitles/images/index_titles_too_wide.png --------------------------------------------------------------------------------