SegueCatalog: Version 1.0, 2015-06-08

First public release.
This commit is contained in:
Liu Lantao 2015-06-13 09:18:40 +08:00
parent 101243ef8f
commit d40c4d4efd
12 changed files with 1258 additions and 0 deletions

42
SegueCatalog/LICENSE.txt Normal file
View File

@ -0,0 +1,42 @@
Sample code project: SegueCatalog: Customizing and Unwinding with View Controller Containment
Version: 1.0
IMPORTANT: This Apple software is supplied to you by Apple
Inc. ("Apple") in consideration of your agreement to the following
terms, and your use, installation, modification or redistribution of
this Apple software constitutes acceptance of these terms. If you do
not agree with these terms, please do not use, install, modify or
redistribute this Apple software.
In consideration of your agreement to abide by the following terms, and
subject to these terms, Apple grants you a personal, non-exclusive
license, under Apple's copyrights in this original Apple software (the
"Apple Software"), to use, reproduce, modify and redistribute the Apple
Software, with or without modifications, in source and/or binary forms;
provided that if you redistribute the Apple Software in its entirety and
without modifications, you must retain this notice and the following
text and disclaimers in all such redistributions of the Apple Software.
Neither the name, trademarks, service marks or logos of Apple Inc. may
be used to endorse or promote products derived from the Apple Software
without specific prior written permission from Apple. Except as
expressly stated in this notice, no other rights or licenses, express or
implied, are granted by Apple herein, including but not limited to any
patent rights that may be infringed by your derivative works or by other
works in which the Apple Software may be incorporated.
The Apple Software is provided by Apple on an "AS IS" basis. APPLE
MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
Copyright (C) 2015 Apple Inc. All Rights Reserved.

15
SegueCatalog/README.md Normal file
View File

@ -0,0 +1,15 @@
# SegueCatalog: Customizing and Unwinding with View Controller Containment
This sample demonstrates how to use External References to factor your storyboards, how to combine UIStoryboardSegue subclasses with Transition Delegates and Adaptivity, and how to use unwind segues with custom container view controllers.
## Requirements
### Build
Xcode 7.0, iOS 9.0 SDK
### Runtime
iOS 9.0
Copyright (C) 2015 Apple Inc. All rights reserved.

View File

@ -0,0 +1,310 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
2722B23C1B1D0692008A78E9 /* AdaptableFormSheetSegue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2722B23B1B1D0692008A78E9 /* AdaptableFormSheetSegue.swift */; };
2759E0471AC24EE500948321 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2759E0461AC24EE500948321 /* AppDelegate.swift */; };
2759E0491AC24EE500948321 /* MasterViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2759E0481AC24EE500948321 /* MasterViewController.swift */; };
2759E04E1AC24EE500948321 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2759E04D1AC24EE500948321 /* Images.xcassets */; };
2759E0511AC24EE500948321 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2759E04F1AC24EE500948321 /* LaunchScreen.xib */; };
277E4ADB1AC5EEC500FA6F23 /* Detail.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 277E4ADA1AC5EEC500FA6F23 /* Detail.storyboard */; };
277E4ADD1AC5F00100FA6F23 /* DetailViewControllers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 277E4ADC1AC5F00100FA6F23 /* DetailViewControllers.swift */; };
277E4AE01AC5F27A00FA6F23 /* Split.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 277E4ADE1AC5F27A00FA6F23 /* Split.storyboard */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
2722B23B1B1D0692008A78E9 /* AdaptableFormSheetSegue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AdaptableFormSheetSegue.swift; sourceTree = "<group>"; };
2759E0431AC24EE500948321 /* SegueCatalog.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SegueCatalog.app; sourceTree = BUILT_PRODUCTS_DIR; };
2759E0461AC24EE500948321 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
2759E0481AC24EE500948321 /* MasterViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MasterViewController.swift; sourceTree = "<group>"; };
2759E04D1AC24EE500948321 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
2759E0501AC24EE500948321 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = "<group>"; };
2759E0521AC24EE500948321 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
277E4ADA1AC5EEC500FA6F23 /* Detail.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Detail.storyboard; sourceTree = "<group>"; };
277E4ADC1AC5F00100FA6F23 /* DetailViewControllers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DetailViewControllers.swift; sourceTree = "<group>"; };
277E4ADF1AC5F27A00FA6F23 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Split.storyboard; sourceTree = "<group>"; };
3ED1B1071B1E238300A2F343 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
2759E0401AC24EE500948321 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
2759E03A1AC24EE500948321 = {
isa = PBXGroup;
children = (
3ED1B1071B1E238300A2F343 /* README.md */,
2759E0451AC24EE500948321 /* SegueCatalog */,
2759E0441AC24EE500948321 /* Products */,
);
sourceTree = "<group>";
};
2759E0441AC24EE500948321 /* Products */ = {
isa = PBXGroup;
children = (
2759E0431AC24EE500948321 /* SegueCatalog.app */,
);
name = Products;
sourceTree = "<group>";
};
2759E0451AC24EE500948321 /* SegueCatalog */ = {
isa = PBXGroup;
children = (
2759E0461AC24EE500948321 /* AppDelegate.swift */,
2759E0481AC24EE500948321 /* MasterViewController.swift */,
277E4ADC1AC5F00100FA6F23 /* DetailViewControllers.swift */,
2722B23B1B1D0692008A78E9 /* AdaptableFormSheetSegue.swift */,
277E4ADE1AC5F27A00FA6F23 /* Split.storyboard */,
277E4ADA1AC5EEC500FA6F23 /* Detail.storyboard */,
2759E04F1AC24EE500948321 /* LaunchScreen.xib */,
2759E0521AC24EE500948321 /* Info.plist */,
2759E04D1AC24EE500948321 /* Images.xcassets */,
);
path = SegueCatalog;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
2759E0421AC24EE500948321 /* SegueCatalog */ = {
isa = PBXNativeTarget;
buildConfigurationList = 2759E0601AC24EE500948321 /* Build configuration list for PBXNativeTarget "SegueCatalog" */;
buildPhases = (
2759E03F1AC24EE500948321 /* Sources */,
2759E0401AC24EE500948321 /* Frameworks */,
2759E0411AC24EE500948321 /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = SegueCatalog;
productName = IncrementalUnwindDemo;
productReference = 2759E0431AC24EE500948321 /* SegueCatalog.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
2759E03B1AC24EE500948321 /* Project object */ = {
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 0700;
LastUpgradeCheck = 0700;
ORGANIZATIONNAME = "Apple, Inc.";
TargetAttributes = {
2759E0421AC24EE500948321 = {
CreatedOnToolsVersion = 7.0;
};
};
};
buildConfigurationList = 2759E03E1AC24EE500948321 /* Build configuration list for PBXProject "SegueCatalog" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 2759E03A1AC24EE500948321;
productRefGroup = 2759E0441AC24EE500948321 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
2759E0421AC24EE500948321 /* SegueCatalog */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
2759E0411AC24EE500948321 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
2759E0511AC24EE500948321 /* LaunchScreen.xib in Resources */,
2759E04E1AC24EE500948321 /* Images.xcassets in Resources */,
277E4ADB1AC5EEC500FA6F23 /* Detail.storyboard in Resources */,
277E4AE01AC5F27A00FA6F23 /* Split.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
2759E03F1AC24EE500948321 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
277E4ADD1AC5F00100FA6F23 /* DetailViewControllers.swift in Sources */,
2759E0491AC24EE500948321 /* MasterViewController.swift in Sources */,
2759E0471AC24EE500948321 /* AppDelegate.swift in Sources */,
2722B23C1B1D0692008A78E9 /* AdaptableFormSheetSegue.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXVariantGroup section */
2759E04F1AC24EE500948321 /* LaunchScreen.xib */ = {
isa = PBXVariantGroup;
children = (
2759E0501AC24EE500948321 /* Base */,
);
name = LaunchScreen.xib;
sourceTree = "<group>";
};
277E4ADE1AC5F27A00FA6F23 /* Split.storyboard */ = {
isa = PBXVariantGroup;
children = (
277E4ADF1AC5F27A00FA6F23 /* Base */,
);
name = Split.storyboard;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
2759E05E1AC24EE500948321 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
2759E05F1AC24EE500948321 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = Release;
};
2759E0611AC24EE500948321 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
FRAMEWORK_SEARCH_PATHS = "$(inherited)";
INFOPLIST_FILE = "$(SRCROOT)/SegueCatalog/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_NAME = SegueCatalog;
TOOLCHAINS = default;
};
name = Debug;
};
2759E0621AC24EE500948321 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
FRAMEWORK_SEARCH_PATHS = "$(inherited)";
INFOPLIST_FILE = "$(SRCROOT)/SegueCatalog/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_NAME = SegueCatalog;
TOOLCHAINS = default;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
2759E03E1AC24EE500948321 /* Build configuration list for PBXProject "SegueCatalog" */ = {
isa = XCConfigurationList;
buildConfigurations = (
2759E05E1AC24EE500948321 /* Debug */,
2759E05F1AC24EE500948321 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
2759E0601AC24EE500948321 /* Build configuration list for PBXNativeTarget "SegueCatalog" */ = {
isa = XCConfigurationList;
buildConfigurations = (
2759E0611AC24EE500948321 /* Debug */,
2759E0621AC24EE500948321 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 2759E03B1AC24EE500948321 /* Project object */;
}

View File

@ -0,0 +1,49 @@
/*
Copyright (C) 2015 Apple Inc. All Rights Reserved.
See LICENSE.txt for this samples licensing information
Abstract:
Custom segue subclass to support the Form Sheet button.
*/
import UIKit
/**
This segue subclass demonstrates how to adapt a view controller that has been
modally presented by a segue. An instance of this segue is triggered by the
Form Sheet nav item owned by an OuterViewController. It is configured to show
a Form Sheet presentation, but Form Sheets are not permissible in Compact
size classes. By default, UIKit will adapt a Form Sheet presentation to a
full-screen presentation, using the same view controller. We would like to
provide an alternative representation in the adapted case.
*/
class AdaptableFormSheetSegue: UIStoryboardSegue, UIAdaptivePresentationControllerDelegate {
override func perform() {
/*
Because this class is used for a Present Modally segue, UIKit will
maintain a strong reference to this segue object for the duration of
the presentation. That way, this segue object will live long enough
to act as the presentation controller's delegate and customize any
adaptation.
*/
destinationViewController.presentationController?.delegate = self
// Call super to get the standard modal presentation behavior.
super.perform()
}
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {
return traitCollection.horizontalSizeClass == .Compact ? .FullScreen : .FormSheet
}
func presentationController(controller: UIPresentationController, viewControllerForAdaptivePresentationStyle style: UIModalPresentationStyle) -> UIViewController? {
/*
Load and return the adapted view controller from the Detail storyboard.
That storyboard is stored within the same bundle that contains this
class.
*/
let adaptableFormSheetSegueBundle = NSBundle(forClass: AdaptableFormSheetSegue.self)
return UIStoryboard(name: "Detail", bundle: adaptableFormSheetSegueBundle).instantiateViewControllerWithIdentifier("Adapted")
}
}

View File

@ -0,0 +1,16 @@
/*
Copyright (C) 2015 Apple Inc. All Rights Reserved.
See LICENSE.txt for this samples licensing information
Abstract:
Main application entry point.
*/
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
// MARK: Properties
var window: UIWindow?
}

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="8121.17" systemVersion="15A178r" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="8101.14"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="iN0-l3-epB">
<rect key="frame" x="0.0" y="0.0" width="480" height="480"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<animations/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
<nil key="simulatedStatusBarMetrics"/>
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
<point key="canvasLocation" x="548" y="455"/>
</view>
</objects>
</document>

View File

@ -0,0 +1,157 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="8121.17" systemVersion="15A178r" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="0uC-JR-KAh">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="8101.14"/>
</dependencies>
<scenes>
<!--Split View Controller-->
<scene sceneID="FtO-DA-zKg">
<objects>
<splitViewController id="0uC-JR-KAh" sceneMemberID="viewController">
<connections>
<segue destination="TnN-eV-uAl" kind="relationship" relationship="masterViewController" id="8C3-qG-JjP"/>
<segue destination="aEe-mT-wgW" kind="relationship" relationship="detailViewController" id="jN0-1Q-vXF"/>
</connections>
</splitViewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="e9k-5T-Llf" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="-625" y="-960"/>
</scene>
<!--Root View Controller-->
<scene sceneID="ZnS-lE-GPo">
<objects>
<tableViewController id="ccN-fu-gPb" customClass="MasterViewController" customModule="SegueCatalog" customModuleProvider="target" sceneMemberID="viewController">
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="t5I-ex-YOw">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<animations/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<sections>
<tableViewSection id="xBz-tB-szP">
<cells>
<tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" textLabel="lXI-jn-cQa" style="IBUITableViewCellStyleDefault" id="w8k-li-wXo">
<rect key="frame" x="0.0" y="64" width="600" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="w8k-li-wXo" id="br2-RC-aDL">
<rect key="frame" x="0.0" y="0.0" width="600" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Push In Master" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="lXI-jn-cQa">
<rect key="frame" x="15" y="0.0" width="570" height="43.5"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<animations/>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<animations/>
</tableViewCellContentView>
<animations/>
<connections>
<segue destination="FY2-Wh-6aV" kind="show" id="igj-W6-O9D">
<nil key="action"/>
</segue>
</connections>
</tableViewCell>
<tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" textLabel="hCI-gO-xqS" style="IBUITableViewCellStyleDefault" id="zz2-Zx-GZs">
<rect key="frame" x="0.0" y="108" width="600" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="zz2-Zx-GZs" id="rn5-oU-cIO">
<rect key="frame" x="0.0" y="0.0" width="600" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Push Detail" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="hCI-gO-xqS">
<rect key="frame" x="15" y="0.0" width="570" height="43.5"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<animations/>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<animations/>
</tableViewCellContentView>
<animations/>
<connections>
<segue destination="aEe-mT-wgW" kind="showDetail" id="bo1-O5-wOW"/>
</connections>
</tableViewCell>
</cells>
</tableViewSection>
</sections>
<connections>
<outlet property="dataSource" destination="ccN-fu-gPb" id="UCW-n8-DV1"/>
<outlet property="delegate" destination="ccN-fu-gPb" id="HJQ-Tw-BXh"/>
</connections>
</tableView>
<navigationItem key="navigationItem" title="Root View Controller" id="3Ff-zr-w9C"/>
</tableViewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="IWi-rx-sZ5" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="962" y="-960"/>
</scene>
<!--View Controller-->
<scene sceneID="X2b-8c-tiH">
<objects>
<viewController id="FY2-Wh-6aV" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="5Uc-gU-evA"/>
<viewControllerLayoutGuide type="bottom" id="i1u-RH-Ynq"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="rfg-Fz-6en">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Qmy-KN-PC1">
<rect key="frame" x="240" y="285" width="120" height="30"/>
<animations/>
<state key="normal" title="Unwind in Master"/>
<connections>
<segue destination="ox2-sx-hGh" kind="unwind" unwindAction="unwindInMaster:" id="QZo-8p-CwL"/>
</connections>
</button>
</subviews>
<animations/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstItem="Qmy-KN-PC1" firstAttribute="centerX" secondItem="rfg-Fz-6en" secondAttribute="centerX" id="1Mo-rd-dsI"/>
<constraint firstItem="Qmy-KN-PC1" firstAttribute="centerY" secondItem="rfg-Fz-6en" secondAttribute="centerY" id="w8D-jy-zZ0"/>
</constraints>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="7pw-ax-JNE" userLabel="First Responder" sceneMemberID="firstResponder"/>
<exit id="ox2-sx-hGh" userLabel="Exit" sceneMemberID="exit"/>
</objects>
<point key="canvasLocation" x="1684" y="-961"/>
</scene>
<!--Detail-->
<scene sceneID="QFU-us-tp5">
<objects>
<viewControllerPlaceholder storyboardName="Detail" id="aEe-mT-wgW" sceneMemberID="viewController"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="VvI-C7-VlQ" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="142" y="-254"/>
</scene>
<!--Navigation Controller-->
<scene sceneID="U8r-3c-bDE">
<objects>
<navigationController id="TnN-eV-uAl" sceneMemberID="viewController">
<navigationBar key="navigationBar" contentMode="scaleToFill" id="09L-SI-He0">
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<animations/>
</navigationBar>
<connections>
<segue destination="ccN-fu-gPb" kind="relationship" relationship="rootViewController" id="mRe-XG-xpA"/>
</connections>
</navigationController>
<placeholder placeholderIdentifier="IBFirstResponder" id="0sS-E3-5bv" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="142" y="-961"/>
</scene>
</scenes>
<inferredMetricsTieBreakers>
<segue reference="bo1-O5-wOW"/>
</inferredMetricsTieBreakers>
</document>

View File

@ -0,0 +1,407 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="8121.17" systemVersion="15A178o" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="LjJ-OQ-XKf">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="8101.14"/>
<capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/>
<capability name="Navigation items with more than one left or right bar item" minToolsVersion="7.0"/>
</dependencies>
<scenes>
<!--Navigation Controller-->
<scene sceneID="mVI-hF-azv">
<objects>
<navigationController id="LjJ-OQ-XKf" sceneMemberID="viewController">
<navigationBar key="navigationBar" contentMode="scaleToFill" id="2f6-dm-5Jh">
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<animations/>
</navigationBar>
<connections>
<segue destination="OdU-HE-Dxa" kind="relationship" relationship="rootViewController" id="dzG-pg-xFJ"/>
</connections>
</navigationController>
<placeholder placeholderIdentifier="IBFirstResponder" id="msU-yP-L3E" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="-433" y="263"/>
</scene>
<!--Root View Controller-->
<scene sceneID="Q8I-cN-jDq">
<objects>
<viewController id="OdU-HE-Dxa" customClass="OuterViewController" customModule="SegueCatalog" customModuleProvider="target" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="tQd-fo-TmS"/>
<viewControllerLayoutGuide type="bottom" id="hdU-Hb-scb"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="MA0-Zm-5v4">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<containerView opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="DOZ-jD-T03">
<rect key="frame" x="150" y="150" width="300" height="300"/>
<animations/>
<connections>
<segue destination="MRb-o5-mAl" kind="embed" id="zym-jm-NSR"/>
</connections>
</containerView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="Outer Unwind Destination" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="SQ6-a2-x1Q">
<rect key="frame" x="201" y="97" width="198" height="21"/>
<animations/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" misplaced="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Bje-nc-ttX">
<rect key="frame" x="222" y="486" width="157" height="30"/>
<animations/>
<state key="normal" title="Push A View Controller"/>
<connections>
<segue destination="Ma5-Sf-umx" kind="show" id="S7j-3W-hgC">
<nil key="action"/>
</segue>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" misplaced="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="FlI-sA-One">
<rect key="frame" x="241" y="519" width="120" height="30"/>
<animations/>
<state key="normal" title="Unwind in Master"/>
<connections>
<segue destination="80V-td-H6H" kind="unwind" unwindAction="unwindInMaster:" id="Isj-AZ-gMs"/>
</connections>
</button>
</subviews>
<animations/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstItem="SQ6-a2-x1Q" firstAttribute="centerX" secondItem="MA0-Zm-5v4" secondAttribute="centerX" id="40D-vW-O9L"/>
<constraint firstItem="Bje-nc-ttX" firstAttribute="top" secondItem="DOZ-jD-T03" secondAttribute="bottom" constant="36" id="8vE-Cc-sDa"/>
<constraint firstItem="FlI-sA-One" firstAttribute="top" secondItem="Bje-nc-ttX" secondAttribute="bottom" constant="3" id="AwD-2k-J2F"/>
<constraint firstItem="DOZ-jD-T03" firstAttribute="width" secondItem="MA0-Zm-5v4" secondAttribute="width" multiplier="0.5" id="ZuG-Nx-78m"/>
<constraint firstItem="DOZ-jD-T03" firstAttribute="top" secondItem="SQ6-a2-x1Q" secondAttribute="bottom" constant="32" id="arB-uo-7nQ"/>
<constraint firstItem="DOZ-jD-T03" firstAttribute="height" secondItem="MA0-Zm-5v4" secondAttribute="height" multiplier="0.5" id="luu-ow-yCU"/>
<constraint firstItem="DOZ-jD-T03" firstAttribute="centerX" secondItem="MA0-Zm-5v4" secondAttribute="centerX" id="mSc-5x-XZ1"/>
<constraint firstItem="FlI-sA-One" firstAttribute="centerX" secondItem="MA0-Zm-5v4" secondAttribute="centerX" id="pjS-I3-Nf8"/>
<constraint firstItem="DOZ-jD-T03" firstAttribute="centerY" secondItem="MA0-Zm-5v4" secondAttribute="centerY" id="u1y-1V-z4p"/>
<constraint firstItem="Bje-nc-ttX" firstAttribute="centerX" secondItem="MA0-Zm-5v4" secondAttribute="centerX" id="wJ6-s4-X6Y"/>
</constraints>
</view>
<navigationItem key="navigationItem" title="Root View Controller" id="sqR-jy-X23">
<rightBarButtonItems>
<barButtonItem title="Modal" id="nO0-in-yIh">
<connections>
<segue destination="Ma5-Sf-umx" kind="presentation" customClass="CustomAnimationPresentationSegue" customModule="SegueCatalog" customModuleProvider="target" id="AVs-Yp-OSe"/>
</connections>
</barButtonItem>
<barButtonItem title="Form Sheet" id="B0i-ku-omR">
<connections>
<segue destination="iNJ-hp-jmn" kind="presentation" customClass="AdaptableFormSheetSegue" customModule="SegueCatalog" customModuleProvider="target" modalPresentationStyle="formSheet" id="oRN-eZ-icO"/>
</connections>
</barButtonItem>
</rightBarButtonItems>
</navigationItem>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="dBN-Rn-vsV" userLabel="First Responder" sceneMemberID="firstResponder"/>
<exit id="80V-td-H6H" userLabel="Exit" sceneMemberID="exit"/>
</objects>
<point key="canvasLocation" x="249" y="263"/>
</scene>
<!--Navigation Controller-->
<scene sceneID="bfU-oh-oCm">
<objects>
<navigationController storyboardIdentifier="Adapted" id="Ukb-ED-zM7" sceneMemberID="viewController">
<navigationBar key="navigationBar" contentMode="scaleToFill" id="dSW-co-rpW">
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<animations/>
</navigationBar>
<connections>
<segue destination="iNJ-hp-jmn" kind="relationship" relationship="rootViewController" id="WS6-dw-WmG"/>
</connections>
</navigationController>
<placeholder placeholderIdentifier="IBFirstResponder" id="ABV-Od-eXI" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="-117" y="976"/>
</scene>
<!--Adapted-->
<scene sceneID="oIr-f8-Y9B">
<objects>
<viewController id="iNJ-hp-jmn" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="VYw-Zf-gQb"/>
<viewControllerLayoutGuide type="bottom" id="Um9-VC-G86"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="PsB-gO-FdI">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" misplaced="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="rIz-51-EI8">
<rect key="frame" x="201" y="285" width="198" height="30"/>
<animations/>
<state key="normal" title="Dismiss Form Sheet to Outer"/>
<connections>
<segue destination="VP6-Vd-RNx" kind="unwind" unwindAction="unwindToOuter:" id="u3h-VJ-cdC"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" misplaced="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="TWG-j2-0oO">
<rect key="frame" x="196" y="323" width="209" height="30"/>
<animations/>
<state key="normal" title="Dismiss Form Sheet to Nested"/>
<connections>
<segue destination="VP6-Vd-RNx" kind="unwind" unwindAction="unwindToNested:" id="PgK-d7-mli"/>
</connections>
</button>
</subviews>
<animations/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstItem="rIz-51-EI8" firstAttribute="centerY" secondItem="PsB-gO-FdI" secondAttribute="centerY" id="7Sb-eD-nrk"/>
<constraint firstItem="rIz-51-EI8" firstAttribute="centerX" secondItem="PsB-gO-FdI" secondAttribute="centerX" id="7sH-Kw-VV0"/>
<constraint firstItem="TWG-j2-0oO" firstAttribute="top" secondItem="rIz-51-EI8" secondAttribute="bottom" constant="8" id="ihf-aJ-7Fx"/>
<constraint firstItem="TWG-j2-0oO" firstAttribute="centerX" secondItem="PsB-gO-FdI" secondAttribute="centerX" id="pMB-4O-bPP"/>
</constraints>
</view>
<navigationItem key="navigationItem" title="Adapted" id="4MZ-RK-cn7"/>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="awL-3E-M0L" userLabel="First Responder" sceneMemberID="firstResponder"/>
<exit id="VP6-Vd-RNx" userLabel="Exit" sceneMemberID="exit"/>
</objects>
<point key="canvasLocation" x="599" y="976"/>
</scene>
<!--Pushed View Controller-->
<scene sceneID="rCD-SK-cQA">
<objects>
<viewController id="Ma5-Sf-umx" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="d3j-5b-x7U"/>
<viewControllerLayoutGuide type="bottom" id="5rW-fA-8gr"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="elS-t1-IxC">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="iiJ-7r-aFA">
<rect key="frame" x="199" y="180" width="202" height="240"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="DgM-NU-YB0">
<rect key="frame" x="0.0" y="0.0" width="202" height="30"/>
<animations/>
<state key="normal" title="Push another view controller"/>
<connections>
<segue destination="Ma5-Sf-umx" kind="show" id="FoD-Q3-npq">
<nil key="action"/>
</segue>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="po4-2C-RAA">
<rect key="frame" x="0.0" y="30" width="202" height="30"/>
<animations/>
<state key="normal" title="Push a nested view controller"/>
<connections>
<segue destination="x9z-i3-e2K" kind="show" id="8ya-hB-1JC">
<nil key="action"/>
</segue>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Mxw-CY-PhL">
<rect key="frame" x="0.0" y="60" width="202" height="30"/>
<animations/>
<state key="normal" title="Push without animation"/>
<connections>
<segue destination="x9z-i3-e2K" kind="show" animates="NO" id="Q5g-cC-c4t">
<nil key="action"/>
</segue>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="lf6-gf-l8i">
<rect key="frame" x="0.0" y="90" width="202" height="30"/>
<animations/>
<state key="normal" title="Push with subclass"/>
<connections>
<segue destination="x9z-i3-e2K" kind="show" customClass="NonAnimatingSegue" customModule="SegueCatalog" customModuleProvider="target" id="stx-vP-7cp">
<nil key="action"/>
</segue>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="1Jr-Cl-f5R">
<rect key="frame" x="0.0" y="120" width="202" height="30"/>
<animations/>
<state key="normal" title="Unwind to outer destination"/>
<connections>
<segue destination="QhI-B5-2TV" kind="unwind" unwindAction="unwindToOuter:" id="v4e-IQ-7f7"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="zJ0-52-slb">
<rect key="frame" x="0.0" y="150" width="202" height="30"/>
<animations/>
<state key="normal" title="Unwind to inner destination"/>
<connections>
<segue destination="QhI-B5-2TV" kind="unwind" unwindAction="unwindToNested:" id="eFN-4w-0Om"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Tb9-Uc-aw1">
<rect key="frame" x="0.0" y="180" width="202" height="30"/>
<animations/>
<state key="normal" title="Unwind in Master"/>
<connections>
<segue destination="QhI-B5-2TV" kind="unwind" unwindAction="unwindInMaster:" id="U9p-fj-dYt"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="0UA-TP-LKb">
<rect key="frame" x="0.0" y="210" width="202" height="30"/>
<animations/>
<state key="normal" title="Unwind without animation"/>
<connections>
<segue destination="QhI-B5-2TV" kind="unwind" identifier="Unwind without animation" unwindAction="unwindToOuter:" id="PiQ-j6-Q5j"/>
</connections>
</button>
</subviews>
<animations/>
</stackView>
</subviews>
<animations/>
<color key="backgroundColor" red="0.99702548980712891" green="0.87293362617492676" blue="0.87790274620056152" alpha="1" colorSpace="calibratedRGB"/>
<constraints>
<constraint firstItem="iiJ-7r-aFA" firstAttribute="centerX" secondItem="elS-t1-IxC" secondAttribute="centerX" id="624-9e-YUa"/>
<constraint firstItem="iiJ-7r-aFA" firstAttribute="centerY" secondItem="elS-t1-IxC" secondAttribute="centerY" id="Vya-Rv-oSk"/>
</constraints>
</view>
<navigationItem key="navigationItem" title="Pushed View Controller" id="qTi-9e-ktC"/>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="fod-78-BIb" userLabel="First Responder" sceneMemberID="firstResponder"/>
<exit id="QhI-B5-2TV" userLabel="Exit" sceneMemberID="exit"/>
</objects>
<point key="canvasLocation" x="965" y="263"/>
</scene>
<!--View Controller-->
<scene sceneID="We6-jd-G01">
<objects>
<viewController id="x9z-i3-e2K" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="tBd-Bi-1UV"/>
<viewControllerLayoutGuide type="bottom" id="HlZ-Ux-69i"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="ovm-ok-0V2">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<containerView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="34i-ex-6Vb">
<rect key="frame" x="60" y="60" width="480" height="480"/>
<animations/>
<connections>
<segue destination="Ma5-Sf-umx" kind="embed" id="QtS-LW-gdL"/>
</connections>
</containerView>
</subviews>
<animations/>
<color key="backgroundColor" red="0.93553829193115234" green="0.86985659599304199" blue="0.99970442056655884" alpha="1" colorSpace="calibratedRGB"/>
<constraints>
<constraint firstItem="34i-ex-6Vb" firstAttribute="centerX" secondItem="ovm-ok-0V2" secondAttribute="centerX" id="3Wy-KE-D2O"/>
<constraint firstItem="34i-ex-6Vb" firstAttribute="height" secondItem="ovm-ok-0V2" secondAttribute="height" multiplier="0.8" id="BA2-LA-9nc"/>
<constraint firstItem="34i-ex-6Vb" firstAttribute="width" secondItem="ovm-ok-0V2" secondAttribute="width" multiplier="0.8" id="S6O-wL-pr8"/>
<constraint firstItem="34i-ex-6Vb" firstAttribute="centerY" secondItem="ovm-ok-0V2" secondAttribute="centerY" id="cKS-at-osu"/>
</constraints>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="WhF-5P-lKa" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="1670" y="263"/>
</scene>
<!--Nested View Controller-->
<scene sceneID="L81-ha-xM7">
<objects>
<viewController automaticallyAdjustsScrollViewInsets="NO" definesPresentationContext="YES" id="MRb-o5-mAl" customClass="NestedViewController" customModule="SegueCatalog" customModuleProvider="target" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="qy3-FK-goe"/>
<viewControllerLayoutGuide type="bottom" id="D55-pz-qYa"/>
</layoutGuides>
<view key="view" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="0KM-fH-tP9">
<rect key="frame" x="0.0" y="0.0" width="300" height="300"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="3" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="1zH-UW-fAP">
<rect key="frame" x="107" y="120" width="87" height="61"/>
<animations/>
<string key="text">Nested
Unwind
Destination</string>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="5yo-ld-OZj">
<rect key="frame" x="58" y="189" width="184" height="30"/>
<animations/>
<state key="normal" title="Modal Present Within Here"/>
<connections>
<segue destination="WyX-Hv-msX" kind="presentation" modalPresentationStyle="currentContext" id="YgE-RR-pMw"/>
</connections>
</button>
</subviews>
<animations/>
<color key="backgroundColor" red="0.87771290540000002" green="0.95820510390000002" blue="0.99972820279999997" alpha="1" colorSpace="calibratedRGB"/>
<constraints>
<constraint firstItem="1zH-UW-fAP" firstAttribute="centerY" secondItem="0KM-fH-tP9" secondAttribute="centerY" id="VGd-mp-zxO"/>
<constraint firstItem="5yo-ld-OZj" firstAttribute="top" secondItem="1zH-UW-fAP" secondAttribute="bottom" constant="8" symbolic="YES" id="cPb-Qd-wLR"/>
<constraint firstItem="1zH-UW-fAP" firstAttribute="centerX" secondItem="0KM-fH-tP9" secondAttribute="centerX" id="v3i-QP-6YP"/>
<constraint firstItem="5yo-ld-OZj" firstAttribute="centerX" secondItem="0KM-fH-tP9" secondAttribute="centerX" id="zTk-JE-PQg"/>
</constraints>
</view>
<toolbarItems/>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="7zI-PC-u3U" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="249" y="-284"/>
</scene>
<!--View Controller-->
<scene sceneID="Jy4-ub-4pQ">
<objects>
<viewController id="WyX-Hv-msX" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="IZy-9w-uXx"/>
<viewControllerLayoutGuide type="bottom" id="6jf-Vs-aFP"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="Hpg-sS-13k">
<rect key="frame" x="0.0" y="0.0" width="300" height="300"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="3" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="mDQ-vm-VY2">
<rect key="frame" x="96" y="120" width="109" height="61"/>
<animations/>
<string key="text">Modal
Presentation
Within Nested</string>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="fEu-Rj-5wp">
<rect key="frame" x="60" y="189" width="181" height="30"/>
<animations/>
<state key="normal" title="Dismiss Modal Via Unwind"/>
<connections>
<segue destination="ACb-ux-jxA" kind="unwind" unwindAction="unwindToNested:" id="PUQ-F3-NtW"/>
</connections>
</button>
</subviews>
<animations/>
<color key="backgroundColor" red="0.99677473306655884" green="0.8684883713722229" blue="0.99980735778808594" alpha="1" colorSpace="calibratedRGB"/>
<constraints>
<constraint firstItem="mDQ-vm-VY2" firstAttribute="centerY" secondItem="Hpg-sS-13k" secondAttribute="centerY" id="EL0-36-55Y"/>
<constraint firstItem="mDQ-vm-VY2" firstAttribute="centerX" secondItem="Hpg-sS-13k" secondAttribute="centerX" id="Hhj-Vl-7C9"/>
<constraint firstItem="fEu-Rj-5wp" firstAttribute="centerX" secondItem="Hpg-sS-13k" secondAttribute="centerX" id="WgR-bM-7bD"/>
<constraint firstItem="fEu-Rj-5wp" firstAttribute="top" secondItem="mDQ-vm-VY2" secondAttribute="bottom" constant="8" symbolic="YES" id="wZt-P1-rlp"/>
</constraints>
</view>
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
<size key="freeformSize" width="300" height="300"/>
</viewController>
<exit id="ACb-ux-jxA" userLabel="Exit" sceneMemberID="exit"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="5kY-HP-qoJ" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="656" y="-284"/>
</scene>
</scenes>
<inferredMetricsTieBreakers>
<segue reference="S7j-3W-hgC"/>
<segue reference="stx-vP-7cp"/>
<segue reference="WS6-dw-WmG"/>
</inferredMetricsTieBreakers>
</document>

View File

@ -0,0 +1,110 @@
/*
Copyright (C) 2015 Apple Inc. All Rights Reserved.
See LICENSE.txt for this samples licensing information
Abstract:
The view controllers used in the Detail storyboard.
*/
import UIKit
class NestedViewController: UIViewController {
@IBAction func unwindToNested(segue: UIStoryboardSegue) {
/*
Empty. Exists solely so that "unwind to nested" segues can find instances
of this class.
Notably, if an instance of this class is currently showing a Current
Context presentation, unwinding to that instance via this action will
only dismiss that presentation if the unwind source is contained within
the presentation.
This is why the "Dismiss via Unwind" button in this app's storyboard
will cause the containing presentation to be dismissed, while the "Unwind
to Nested" button will not.
*/
}
}
class OuterViewController: UIViewController {
@IBAction func unwindToOuter(segue: UIStoryboardSegue) {
/*
Empty. Exists solely so that "unwind to outer" segues can find
instances of this class.
*/
}
}
class NonAnimatingSegue: UIStoryboardSegue {
override func perform() {
UIView.performWithoutAnimation {
super.perform()
}
}
}
class CustomAnimationPresentationSegue: UIStoryboardSegue, UIViewControllerTransitioningDelegate, UIViewControllerAnimatedTransitioning {
override func perform() {
/*
Because this class is used for a Present Modally segue, UIKit will
maintain a strong reference to this segue object for the duration of
the presentation. That way, this segue object will still be around to
provide an animation controller for the eventual dismissal, as well
as for the initial presentation.
*/
destinationViewController.transitioningDelegate = self
super.perform()
}
func animationControllerForPresentedController(presented: UIViewController, presentingController presenting: UIViewController, sourceController source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
return self
}
func animationControllerForDismissedController(dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
return self
}
func transitionDuration(transitionContext: UIViewControllerContextTransitioning?) -> NSTimeInterval {
return 0.5
}
func animateTransition(transitionContext: UIViewControllerContextTransitioning) {
let containerView = transitionContext.containerView()!
let toView = transitionContext.viewForKey(UITransitionContextToViewKey)!
if transitionContext.viewControllerForKey(UITransitionContextToViewControllerKey) == destinationViewController {
// Presenting.
UIView.performWithoutAnimation {
toView.alpha = 0
containerView.addSubview(toView)
}
let transitionContextDuration = transitionDuration(transitionContext)
UIView.animateWithDuration(transitionContextDuration, animations: {
toView.alpha = 1
}, completion: { success in
transitionContext.completeTransition(success)
})
}
else {
// Dismissing.
let fromView = transitionContext.viewForKey(UITransitionContextFromViewKey)!
UIView.performWithoutAnimation {
containerView.insertSubview(toView, belowSubview: fromView)
}
let transitionContextDuration = transitionDuration(transitionContext)
UIView.animateWithDuration(transitionContextDuration, animations: {
fromView.alpha = 0
}, completion: { success in
transitionContext.completeTransition(success)
})
}
}
}

View File

@ -0,0 +1,68 @@
{
"images" : [
{
"idiom" : "iphone",
"size" : "29x29",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "29x29",
"scale" : "3x"
},
{
"idiom" : "iphone",
"size" : "40x40",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "40x40",
"scale" : "3x"
},
{
"idiom" : "iphone",
"size" : "60x60",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "60x60",
"scale" : "3x"
},
{
"idiom" : "ipad",
"size" : "29x29",
"scale" : "1x"
},
{
"idiom" : "ipad",
"size" : "29x29",
"scale" : "2x"
},
{
"idiom" : "ipad",
"size" : "40x40",
"scale" : "1x"
},
{
"idiom" : "ipad",
"size" : "40x40",
"scale" : "2x"
},
{
"idiom" : "ipad",
"size" : "76x76",
"scale" : "1x"
},
{
"idiom" : "ipad",
"size" : "76x76",
"scale" : "2x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

View File

@ -0,0 +1,47 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>com.example.apple-samplecode.SegueCatalog</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
<string>Split</string>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
</array>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
</dict>
</plist>

View File

@ -0,0 +1,18 @@
/*
Copyright (C) 2015 Apple Inc. All Rights Reserved.
See LICENSE.txt for this samples licensing information
Abstract:
The view controller used as the root of the split view's master-side navigation controller.
*/
import UIKit
class MasterViewController: UITableViewController {
@IBAction func unwindInMaster(segue: UIStoryboardSegue) {
/*
Empty. Exists solely so that "unwind in master" segues can
find this instance as a destination.
*/
}
}