furter 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. data/.gitignore +21 -0
  2. data/.rspec +2 -0
  3. data/.travis.yml +2 -0
  4. data/Changelog +3 -0
  5. data/Gemfile +3 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +25 -0
  8. data/Rakefile +30 -0
  9. data/app/FurterApp/Frank/features/my_first.feature +12 -0
  10. data/app/FurterApp/Frank/features/step_definitions/launch_steps.rb +20 -0
  11. data/app/FurterApp/Frank/features/support/env.rb +8 -0
  12. data/app/FurterApp/Frank/frankify.xcconfig +6 -0
  13. data/app/FurterApp/Frank/libCocoaAsyncSocket.a +0 -0
  14. data/app/FurterApp/Frank/libCocoaAsyncSocketMac.a +0 -0
  15. data/app/FurterApp/Frank/libCocoaHTTPServer.a +0 -0
  16. data/app/FurterApp/Frank/libCocoaHTTPServerMac.a +0 -0
  17. data/app/FurterApp/Frank/libCocoaLumberjack.a +0 -0
  18. data/app/FurterApp/Frank/libCocoaLumberjackMac.a +0 -0
  19. data/app/FurterApp/Frank/libFrank.a +0 -0
  20. data/app/FurterApp/Frank/libFrankMac.a +0 -0
  21. data/app/FurterApp/Frank/libShelley.a +0 -0
  22. data/app/FurterApp/Frank/libShelleyMac.a +0 -0
  23. data/app/FurterApp/FurterApp.xcodeproj/project.pbxproj +807 -0
  24. data/app/FurterApp/FurterApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  25. data/app/FurterApp/FurterApp.xcodeproj/project.xcworkspace/xcuserdata/lwilson.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  26. data/app/FurterApp/FurterApp.xcodeproj/xcuserdata/lwilson.xcuserdatad/xcschemes/FurterApp.xcscheme +86 -0
  27. data/app/FurterApp/FurterApp.xcodeproj/xcuserdata/lwilson.xcuserdatad/xcschemes/xcschememanagement.plist +22 -0
  28. data/app/FurterApp/FurterApp/AppDelegate.h +22 -0
  29. data/app/FurterApp/FurterApp/AppDelegate.m +161 -0
  30. data/app/FurterApp/FurterApp/Default-568h@2x.png +0 -0
  31. data/app/FurterApp/FurterApp/Default.png +0 -0
  32. data/app/FurterApp/FurterApp/Default@2x.png +0 -0
  33. data/app/FurterApp/FurterApp/DetailViewController.h +23 -0
  34. data/app/FurterApp/FurterApp/DetailViewController.m +80 -0
  35. data/app/FurterApp/FurterApp/FurterApp-Info.plist +59 -0
  36. data/app/FurterApp/FurterApp/FurterApp-Prefix.pch +15 -0
  37. data/app/FurterApp/FurterApp/FurterApp.xcdatamodeld/.xccurrentversion +8 -0
  38. data/app/FurterApp/FurterApp/FurterApp.xcdatamodeld/FurterApp.xcdatamodel/contents +9 -0
  39. data/app/FurterApp/FurterApp/MasterViewController.h +22 -0
  40. data/app/FurterApp/FurterApp/MasterViewController.m +235 -0
  41. data/app/FurterApp/FurterApp/en.lproj/InfoPlist.strings +2 -0
  42. data/app/FurterApp/FurterApp/en.lproj/MainStoryboard_iPad.storyboard +260 -0
  43. data/app/FurterApp/FurterApp/en.lproj/MainStoryboard_iPhone.storyboard +129 -0
  44. data/app/FurterApp/FurterApp/main.m +18 -0
  45. data/cucumber.yml +2 -0
  46. data/features/button.feature +12 -0
  47. data/features/label.feature +10 -0
  48. data/features/navigation.feature +5 -0
  49. data/features/step_definitions/button_steps.rb +7 -0
  50. data/features/step_definitions/label_steps.rb +8 -0
  51. data/features/step_definitions/navigation_steps.rb +7 -0
  52. data/features/step_definitions/switches_steps.rb +12 -0
  53. data/features/step_definitions/text_steps.rb +25 -0
  54. data/features/support/core_ext/string.rb +9 -0
  55. data/features/support/env.rb +25 -0
  56. data/features/support/hooks.rb +3 -0
  57. data/features/support/screens/detail.rb +15 -0
  58. data/features/support/screens/elsewhere_page.rb +7 -0
  59. data/features/switches.feature +7 -0
  60. data/features/text.feature +15 -0
  61. data/furter.gemspec +26 -0
  62. data/lib/furter.rb +53 -0
  63. data/lib/furter/accessors.rb +87 -0
  64. data/lib/furter/accessors/alert_button.rb +18 -0
  65. data/lib/furter/accessors/button.rb +17 -0
  66. data/lib/furter/accessors/label.rb +13 -0
  67. data/lib/furter/accessors/map_pin.rb +18 -0
  68. data/lib/furter/accessors/switch.rb +20 -0
  69. data/lib/furter/accessors/table.rb +15 -0
  70. data/lib/furter/accessors/table_item.rb +10 -0
  71. data/lib/furter/accessors/text.rb +27 -0
  72. data/lib/furter/accessors/view.rb +46 -0
  73. data/lib/furter/navigation.rb +25 -0
  74. data/lib/furter/version.rb +3 -0
  75. data/spec/lib/furter/accessors/button_spec.rb +23 -0
  76. data/spec/lib/furter/accessors/label_spec.rb +24 -0
  77. data/spec/lib/furter/accessors/switch_spec.rb +28 -0
  78. data/spec/lib/furter/accessors/text_spec.rb +39 -0
  79. data/spec/lib/furter/accessors/view_spec.rb +43 -0
  80. data/spec/lib/furter/accessors_spec.rb +116 -0
  81. data/spec/spec_helper.rb +18 -0
  82. metadata +234 -0
@@ -0,0 +1,15 @@
1
+ //
2
+ // Prefix header for all source files of the 'FurterApp' target in the 'FurterApp' project
3
+ //
4
+
5
+ #import <Availability.h>
6
+
7
+ #ifndef __IPHONE_5_0
8
+ #warning "This project uses features only available in iOS SDK 5.0 and later."
9
+ #endif
10
+
11
+ #ifdef __OBJC__
12
+ #import <UIKit/UIKit.h>
13
+ #import <Foundation/Foundation.h>
14
+ #import <CoreData/CoreData.h>
15
+ #endif
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>_XCCurrentVersionName</key>
6
+ <string>FurterApp.xcdatamodel</string>
7
+ </dict>
8
+ </plist>
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2
+ <model name="Test1.xcdatamodel" userDefinedModelVersionIdentifier="" type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="1" systemVersion="11A491" minimumToolsVersion="Automatic" macOSVersion="Automatic" iOSVersion="Automatic">
3
+ <entity name="Event">
4
+ <attribute name="timeStamp" optional="YES" attributeType="Date"/>
5
+ </entity>
6
+ <elements>
7
+ <element name="Event" positionX="261" positionY="189" width="128" height="60"/>
8
+ </elements>
9
+ </model>
@@ -0,0 +1,22 @@
1
+ //
2
+ // MasterViewController.h
3
+ // FurterApp
4
+ //
5
+ // Created by Levi Wilson on 3/20/13.
6
+ // Copyright (c) 2013 Levi Wilson. All rights reserved.
7
+ //
8
+
9
+ #import <UIKit/UIKit.h>
10
+
11
+ @class DetailViewController;
12
+
13
+ #import <CoreData/CoreData.h>
14
+
15
+ @interface MasterViewController : UITableViewController <NSFetchedResultsControllerDelegate>
16
+
17
+ @property (strong, nonatomic) DetailViewController *detailViewController;
18
+
19
+ @property (strong, nonatomic) NSFetchedResultsController *fetchedResultsController;
20
+ @property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;
21
+
22
+ @end
@@ -0,0 +1,235 @@
1
+ //
2
+ // MasterViewController.m
3
+ // FurterApp
4
+ //
5
+ // Created by Levi Wilson on 3/20/13.
6
+ // Copyright (c) 2013 Levi Wilson. All rights reserved.
7
+ //
8
+
9
+ #import "MasterViewController.h"
10
+
11
+ #import "DetailViewController.h"
12
+
13
+ @interface MasterViewController ()
14
+ - (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath;
15
+ @end
16
+
17
+ @implementation MasterViewController
18
+
19
+ - (void)awakeFromNib
20
+ {
21
+ if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
22
+ self.clearsSelectionOnViewWillAppear = NO;
23
+ self.contentSizeForViewInPopover = CGSizeMake(320.0, 600.0);
24
+ }
25
+ [super awakeFromNib];
26
+ }
27
+
28
+ - (void)viewDidLoad
29
+ {
30
+ [super viewDidLoad];
31
+ // Do any additional setup after loading the view, typically from a nib.
32
+ self.navigationItem.leftBarButtonItem = self.editButtonItem;
33
+
34
+ UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(insertNewObject:)];
35
+ self.navigationItem.rightBarButtonItem = addButton;
36
+ self.detailViewController = (DetailViewController *)[[self.splitViewController.viewControllers lastObject] topViewController];
37
+ }
38
+
39
+ - (void)didReceiveMemoryWarning
40
+ {
41
+ [super didReceiveMemoryWarning];
42
+ // Dispose of any resources that can be recreated.
43
+ }
44
+
45
+ - (void)insertNewObject:(id)sender
46
+ {
47
+ NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
48
+ NSEntityDescription *entity = [[self.fetchedResultsController fetchRequest] entity];
49
+ NSManagedObject *newManagedObject = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context];
50
+
51
+ // If appropriate, configure the new managed object.
52
+ // Normally you should use accessor methods, but using KVC here avoids the need to add a custom class to the template.
53
+ [newManagedObject setValue:[NSDate date] forKey:@"timeStamp"];
54
+
55
+ // Save the context.
56
+ NSError *error = nil;
57
+ if (![context save:&error]) {
58
+ // Replace this implementation with code to handle the error appropriately.
59
+ // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
60
+ NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
61
+ abort();
62
+ }
63
+ }
64
+
65
+ #pragma mark - Table View
66
+
67
+ - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
68
+ {
69
+ return [[self.fetchedResultsController sections] count];
70
+ }
71
+
72
+ - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
73
+ {
74
+ id <NSFetchedResultsSectionInfo> sectionInfo = [self.fetchedResultsController sections][section];
75
+ return [sectionInfo numberOfObjects];
76
+ }
77
+
78
+ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
79
+ {
80
+ UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
81
+ [self configureCell:cell atIndexPath:indexPath];
82
+ return cell;
83
+ }
84
+
85
+ - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
86
+ {
87
+ // Return NO if you do not want the specified item to be editable.
88
+ return YES;
89
+ }
90
+
91
+ - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
92
+ {
93
+ if (editingStyle == UITableViewCellEditingStyleDelete) {
94
+ NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
95
+ [context deleteObject:[self.fetchedResultsController objectAtIndexPath:indexPath]];
96
+
97
+ NSError *error = nil;
98
+ if (![context save:&error]) {
99
+ // Replace this implementation with code to handle the error appropriately.
100
+ // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
101
+ NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
102
+ abort();
103
+ }
104
+ }
105
+ }
106
+
107
+ - (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
108
+ {
109
+ // The table view should not be re-orderable.
110
+ return NO;
111
+ }
112
+
113
+ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
114
+ {
115
+ if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
116
+ NSManagedObject *object = [[self fetchedResultsController] objectAtIndexPath:indexPath];
117
+ self.detailViewController.detailItem = object;
118
+ }
119
+ }
120
+
121
+ - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
122
+ {
123
+ if ([[segue identifier] isEqualToString:@"showDetail"]) {
124
+ NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
125
+ NSManagedObject *object = [[self fetchedResultsController] objectAtIndexPath:indexPath];
126
+ [[segue destinationViewController] setDetailItem:object];
127
+ }
128
+ }
129
+
130
+ #pragma mark - Fetched results controller
131
+
132
+ - (NSFetchedResultsController *)fetchedResultsController
133
+ {
134
+ if (_fetchedResultsController != nil) {
135
+ return _fetchedResultsController;
136
+ }
137
+
138
+ NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
139
+ // Edit the entity name as appropriate.
140
+ NSEntityDescription *entity = [NSEntityDescription entityForName:@"Event" inManagedObjectContext:self.managedObjectContext];
141
+ [fetchRequest setEntity:entity];
142
+
143
+ // Set the batch size to a suitable number.
144
+ [fetchRequest setFetchBatchSize:20];
145
+
146
+ // Edit the sort key as appropriate.
147
+ NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"timeStamp" ascending:NO];
148
+ NSArray *sortDescriptors = @[sortDescriptor];
149
+
150
+ [fetchRequest setSortDescriptors:sortDescriptors];
151
+
152
+ // Edit the section name key path and cache name if appropriate.
153
+ // nil for section name key path means "no sections".
154
+ NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"Master"];
155
+ aFetchedResultsController.delegate = self;
156
+ self.fetchedResultsController = aFetchedResultsController;
157
+
158
+ NSError *error = nil;
159
+ if (![self.fetchedResultsController performFetch:&error]) {
160
+ // Replace this implementation with code to handle the error appropriately.
161
+ // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
162
+ NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
163
+ abort();
164
+ }
165
+
166
+ return _fetchedResultsController;
167
+ }
168
+
169
+ - (void)controllerWillChangeContent:(NSFetchedResultsController *)controller
170
+ {
171
+ [self.tableView beginUpdates];
172
+ }
173
+
174
+ - (void)controller:(NSFetchedResultsController *)controller didChangeSection:(id <NSFetchedResultsSectionInfo>)sectionInfo
175
+ atIndex:(NSUInteger)sectionIndex forChangeType:(NSFetchedResultsChangeType)type
176
+ {
177
+ switch(type) {
178
+ case NSFetchedResultsChangeInsert:
179
+ [self.tableView insertSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:UITableViewRowAnimationFade];
180
+ break;
181
+
182
+ case NSFetchedResultsChangeDelete:
183
+ [self.tableView deleteSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:UITableViewRowAnimationFade];
184
+ break;
185
+ }
186
+ }
187
+
188
+ - (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject
189
+ atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type
190
+ newIndexPath:(NSIndexPath *)newIndexPath
191
+ {
192
+ UITableView *tableView = self.tableView;
193
+
194
+ switch(type) {
195
+ case NSFetchedResultsChangeInsert:
196
+ [tableView insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
197
+ break;
198
+
199
+ case NSFetchedResultsChangeDelete:
200
+ [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
201
+ break;
202
+
203
+ case NSFetchedResultsChangeUpdate:
204
+ [self configureCell:[tableView cellForRowAtIndexPath:indexPath] atIndexPath:indexPath];
205
+ break;
206
+
207
+ case NSFetchedResultsChangeMove:
208
+ [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
209
+ [tableView insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
210
+ break;
211
+ }
212
+ }
213
+
214
+ - (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
215
+ {
216
+ [self.tableView endUpdates];
217
+ }
218
+
219
+ /*
220
+ // Implementing the above methods to update the table view in response to individual changes may have performance implications if a large number of changes are made simultaneously. If this proves to be an issue, you can instead just implement controllerDidChangeContent: which notifies the delegate that all section and object changes have been processed.
221
+
222
+ - (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
223
+ {
224
+ // In the simplest, most efficient, case, reload the table view.
225
+ [self.tableView reloadData];
226
+ }
227
+ */
228
+
229
+ - (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath
230
+ {
231
+ NSManagedObject *object = [self.fetchedResultsController objectAtIndexPath:indexPath];
232
+ cell.textLabel.text = [[object valueForKey:@"timeStamp"] description];
233
+ }
234
+
235
+ @end
@@ -0,0 +1,2 @@
1
+ /* Localized versions of Info.plist keys */
2
+
@@ -0,0 +1,260 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="2.0" toolsVersion="3084" systemVersion="12D78" targetRuntime="iOS.CocoaTouch.iPad" propertyAccessControl="none" useAutolayout="YES" initialViewController="5">
3
+ <dependencies>
4
+ <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="2083"/>
5
+ </dependencies>
6
+ <scenes>
7
+ <!--Navigation Controller-->
8
+ <scene sceneID="14">
9
+ <objects>
10
+ <navigationController id="3" sceneMemberID="viewController">
11
+ <navigationBar key="navigationBar" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" id="6">
12
+ <autoresizingMask key="autoresizingMask"/>
13
+ </navigationBar>
14
+ <connections>
15
+ <segue destination="19" kind="relationship" relationship="rootViewController" id="25"/>
16
+ </connections>
17
+ </navigationController>
18
+ <placeholder placeholderIdentifier="IBFirstResponder" id="13" sceneMemberID="firstResponder"/>
19
+ </objects>
20
+ <point key="canvasLocation" x="448" y="-630"/>
21
+ </scene>
22
+ <!--Detail View Controller - Detail-->
23
+ <scene sceneID="16">
24
+ <objects>
25
+ <viewController storyboardIdentifier="" title="Detail" id="4" customClass="DetailViewController" sceneMemberID="viewController">
26
+ <view key="view" contentMode="scaleToFill" id="26">
27
+ <rect key="frame" x="0.0" y="64" width="703" height="704"/>
28
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
29
+ <subviews>
30
+ <label clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" text="Detail view content goes here" textAlignment="center" lineBreakMode="tailTruncation" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="27">
31
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
32
+ <accessibility key="accessibilityConfiguration" label="labelByAccessibilityLabel"/>
33
+ <fontDescription key="fontDescription" type="system" size="system"/>
34
+ <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
35
+ <nil key="highlightedColor"/>
36
+ </label>
37
+ <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="First Field" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="mEd-bW-xG3">
38
+ <accessibility key="accessibilityConfiguration" hint="First Field">
39
+ <accessibilityTraits key="traits" none="YES"/>
40
+ </accessibility>
41
+ <constraints>
42
+ <constraint firstAttribute="height" constant="30" id="ZDx-36-Vlf"/>
43
+ <constraint firstAttribute="width" constant="201" id="v52-Lv-Kpf"/>
44
+ </constraints>
45
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
46
+ <textInputTraits key="textInputTraits"/>
47
+ </textField>
48
+ <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="HNa-e4-2od">
49
+ <accessibility key="accessibilityConfiguration" hint="" label="textByLabel">
50
+ <accessibilityTraits key="traits" none="YES"/>
51
+ </accessibility>
52
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
53
+ <textInputTraits key="textInputTraits"/>
54
+ </textField>
55
+ <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Placeholder" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="79f-eU-bDt">
56
+ <fontDescription key="fontDescription" type="system" pointSize="17"/>
57
+ <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
58
+ <nil key="highlightedColor"/>
59
+ </label>
60
+ <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Label" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="nbu-fr-Znd">
61
+ <fontDescription key="fontDescription" type="system" pointSize="17"/>
62
+ <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
63
+ <nil key="highlightedColor"/>
64
+ </label>
65
+ <switch opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" on="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Nyi-ck-8hR">
66
+ <accessibility key="accessibilityConfiguration" label="switchToggle"/>
67
+ </switch>
68
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="MgB-Y1-P3J">
69
+ <constraints>
70
+ <constraint firstAttribute="width" constant="155" id="1Nz-03-QXb"/>
71
+ </constraints>
72
+ <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
73
+ <state key="normal" title="Some Button">
74
+ <color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
75
+ <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
76
+ </state>
77
+ <state key="highlighted">
78
+ <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
79
+ </state>
80
+ <connections>
81
+ <action selector="someButtonClick:" destination="4" eventType="touchDown" id="LKw-by-anH"/>
82
+ </connections>
83
+ </button>
84
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="6Hu-uu-EUY">
85
+ <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
86
+ <state key="normal" title="Labeled Button">
87
+ <color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
88
+ <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
89
+ </state>
90
+ <state key="highlighted">
91
+ <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
92
+ </state>
93
+ <connections>
94
+ <action selector="onLabeledButtonClicked:" destination="4" eventType="touchDown" id="SRl-Pb-TKU"/>
95
+ </connections>
96
+ </button>
97
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="n4M-Kb-ePv">
98
+ <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
99
+ <state key="normal" title="Go Elsewhere">
100
+ <color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
101
+ <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
102
+ </state>
103
+ <state key="highlighted">
104
+ <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
105
+ </state>
106
+ <connections>
107
+ <segue destination="2m6-NE-oGx" kind="push" id="g3T-p0-Sec"/>
108
+ </connections>
109
+ </button>
110
+ </subviews>
111
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
112
+ <constraints>
113
+ <constraint firstItem="HNa-e4-2od" firstAttribute="leading" secondItem="mEd-bW-xG3" secondAttribute="leading" type="default" id="078-hV-XP8"/>
114
+ <constraint firstItem="79f-eU-bDt" firstAttribute="leading" secondItem="26" secondAttribute="leading" constant="20" symbolic="YES" type="default" id="1JC-Aj-NzB"/>
115
+ <constraint firstItem="n4M-Kb-ePv" firstAttribute="top" secondItem="6Hu-uu-EUY" secondAttribute="bottom" constant="8" symbolic="YES" type="default" id="9II-fH-f7K"/>
116
+ <constraint firstAttribute="trailing" secondItem="27" secondAttribute="trailing" constant="20" symbolic="YES" type="default" id="CON-Cb-dBe"/>
117
+ <constraint firstAttribute="trailing" secondItem="Nyi-ck-8hR" secondAttribute="trailing" constant="227" id="G0P-fu-R9M"/>
118
+ <constraint firstItem="6Hu-uu-EUY" firstAttribute="leading" secondItem="MgB-Y1-P3J" secondAttribute="leading" type="default" id="GwV-n1-zD7"/>
119
+ <constraint firstItem="HNa-e4-2od" firstAttribute="top" secondItem="mEd-bW-xG3" secondAttribute="bottom" constant="8" symbolic="YES" type="default" id="IGG-em-f1e"/>
120
+ <constraint firstItem="mEd-bW-xG3" firstAttribute="top" secondItem="26" secondAttribute="top" constant="19" id="KGI-gf-TAe"/>
121
+ <constraint firstItem="27" firstAttribute="leading" secondItem="26" secondAttribute="leading" constant="20" symbolic="YES" type="default" id="LAk-gc-aCl"/>
122
+ <constraint firstItem="nbu-fr-Znd" firstAttribute="baseline" secondItem="HNa-e4-2od" secondAttribute="baseline" type="default" id="M5i-yy-h0N"/>
123
+ <constraint firstItem="6Hu-uu-EUY" firstAttribute="top" secondItem="MgB-Y1-P3J" secondAttribute="bottom" constant="8" symbolic="YES" type="default" id="MWf-xM-HxM"/>
124
+ <constraint firstItem="nbu-fr-Znd" firstAttribute="leading" secondItem="26" secondAttribute="leading" constant="20" symbolic="YES" type="default" id="RZE-cI-a2V"/>
125
+ <constraint firstItem="MgB-Y1-P3J" firstAttribute="leading" secondItem="HNa-e4-2od" secondAttribute="leading" type="default" id="TI6-aB-T6l"/>
126
+ <constraint firstItem="6Hu-uu-EUY" firstAttribute="trailing" secondItem="MgB-Y1-P3J" secondAttribute="trailing" type="default" id="Tkv-gE-Bb0"/>
127
+ <constraint firstItem="79f-eU-bDt" firstAttribute="top" secondItem="26" secondAttribute="top" constant="23" id="WAb-82-oiE"/>
128
+ <constraint firstItem="HNa-e4-2od" firstAttribute="trailing" secondItem="mEd-bW-xG3" secondAttribute="trailing" type="default" id="e4T-wS-zIa"/>
129
+ <constraint firstItem="27" firstAttribute="centerY" secondItem="26" secondAttribute="centerY" type="default" id="fbb-bQ-YI1"/>
130
+ <constraint firstItem="MgB-Y1-P3J" firstAttribute="top" secondItem="26" secondAttribute="top" constant="120" id="fxO-Da-wfr"/>
131
+ <constraint firstItem="n4M-Kb-ePv" firstAttribute="leading" secondItem="6Hu-uu-EUY" secondAttribute="leading" type="default" id="gQf-GL-AtC"/>
132
+ <constraint firstItem="mEd-bW-xG3" firstAttribute="leading" secondItem="26" secondAttribute="leading" constant="163" id="kHo-k9-xfB"/>
133
+ <constraint firstItem="n4M-Kb-ePv" firstAttribute="trailing" secondItem="6Hu-uu-EUY" secondAttribute="trailing" type="default" id="kXJ-R6-5W3"/>
134
+ <constraint firstItem="79f-eU-bDt" firstAttribute="baseline" secondItem="mEd-bW-xG3" secondAttribute="baseline" type="default" id="piK-8v-q9x"/>
135
+ <constraint firstItem="Nyi-ck-8hR" firstAttribute="top" secondItem="nbu-fr-Znd" secondAttribute="top" type="default" id="wtS-Ul-nbp"/>
136
+ </constraints>
137
+ <simulatedOrientationMetrics key="simulatedOrientationMetrics" orientation="landscapeRight"/>
138
+ </view>
139
+ <toolbarItems/>
140
+ <navigationItem key="navigationItem" title="Detail" id="53"/>
141
+ <connections>
142
+ <outlet property="detailDescriptionLabel" destination="27" id="29"/>
143
+ <outlet property="labelTextField" destination="HNa-e4-2od" id="SHv-1W-wQm"/>
144
+ <outlet property="labeledButton" destination="6Hu-uu-EUY" id="lP4-Wp-TLL"/>
145
+ <outlet property="labeledLabel" destination="27" id="GUQ-6K-Ygb"/>
146
+ <outlet property="placeholderTextField" destination="mEd-bW-xG3" id="WJN-WF-CeJ"/>
147
+ <outlet property="textButton" destination="MgB-Y1-P3J" id="dgB-Uo-P2L"/>
148
+ </connections>
149
+ </viewController>
150
+ <placeholder placeholderIdentifier="IBFirstResponder" id="15" sceneMemberID="firstResponder"/>
151
+ </objects>
152
+ <point key="canvasLocation" x="436" y="248"/>
153
+ </scene>
154
+ <!--View Controller - Elsewhere-->
155
+ <scene sceneID="c75-js-XhF">
156
+ <objects>
157
+ <viewController title="Elsewhere" id="2m6-NE-oGx" sceneMemberID="viewController">
158
+ <view key="view" contentMode="scaleToFill" id="L6v-eP-0Ap">
159
+ <rect key="frame" x="0.0" y="64" width="703" height="704"/>
160
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
161
+ <subviews>
162
+ <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="You are now elsewhere." lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="2Sw-kC-LPj">
163
+ <fontDescription key="fontDescription" type="system" pointSize="17"/>
164
+ <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
165
+ <nil key="highlightedColor"/>
166
+ </label>
167
+ </subviews>
168
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
169
+ <constraints>
170
+ <constraint firstItem="2Sw-kC-LPj" firstAttribute="top" secondItem="L6v-eP-0Ap" secondAttribute="top" constant="341" id="fPL-qj-geg"/>
171
+ <constraint firstItem="2Sw-kC-LPj" firstAttribute="centerX" secondItem="L6v-eP-0Ap" secondAttribute="centerX" type="default" id="iV6-oV-7kk"/>
172
+ </constraints>
173
+ <simulatedOrientationMetrics key="simulatedOrientationMetrics" orientation="landscapeRight"/>
174
+ </view>
175
+ <navigationItem key="navigationItem" title="Elsewhere" id="Y1Z-Bv-f1J"/>
176
+ </viewController>
177
+ <placeholder placeholderIdentifier="IBFirstResponder" id="Noc-VA-Z4v" userLabel="First Responder" sceneMemberID="firstResponder"/>
178
+ </objects>
179
+ <point key="canvasLocation" x="1193" y="248"/>
180
+ </scene>
181
+ <!--Split View Controller-->
182
+ <scene sceneID="18">
183
+ <objects>
184
+ <splitViewController id="5" sceneMemberID="viewController">
185
+ <toolbarItems/>
186
+ <simulatedStatusBarMetrics key="simulatedStatusBarMetrics" statusBarStyle="blackTranslucent"/>
187
+ <simulatedOrientationMetrics key="simulatedOrientationMetrics" orientation="landscapeRight"/>
188
+ <connections>
189
+ <segue destination="3" kind="relationship" relationship="masterViewController" id="9"/>
190
+ <segue destination="42" kind="relationship" relationship="detailViewController" id="51"/>
191
+ </connections>
192
+ </splitViewController>
193
+ <placeholder placeholderIdentifier="IBFirstResponder" id="17" sceneMemberID="firstResponder"/>
194
+ </objects>
195
+ <point key="canvasLocation" x="-687" y="-630"/>
196
+ </scene>
197
+ <!--Master View Controller - Master-->
198
+ <scene sceneID="24">
199
+ <objects>
200
+ <tableViewController storyboardIdentifier="" title="Master" clearsSelectionOnViewWillAppear="NO" id="19" customClass="MasterViewController" sceneMemberID="viewController">
201
+ <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="20">
202
+ <rect key="frame" x="0.0" y="64" width="320" height="704"/>
203
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
204
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
205
+ <simulatedOrientationMetrics key="simulatedOrientationMetrics" orientation="landscapeRight"/>
206
+ <prototypes>
207
+ <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="Cell" textLabel="tIi-5l-S0i" style="IBUITableViewCellStyleDefault" id="ZSw-0O-9Pw">
208
+ <rect key="frame" x="0.0" y="22" width="320" height="44"/>
209
+ <autoresizingMask key="autoresizingMask"/>
210
+ <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
211
+ <rect key="frame" x="0.0" y="0.0" width="320" height="43"/>
212
+ <autoresizingMask key="autoresizingMask"/>
213
+ <subviews>
214
+ <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" text="Title" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="tIi-5l-S0i">
215
+ <rect key="frame" x="10" y="0.0" width="300" height="43"/>
216
+ <autoresizingMask key="autoresizingMask"/>
217
+ <fontDescription key="fontDescription" type="boldSystem" pointSize="20"/>
218
+ <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
219
+ <color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
220
+ </label>
221
+ </subviews>
222
+ <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
223
+ </view>
224
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
225
+ </tableViewCell>
226
+ </prototypes>
227
+ <sections/>
228
+ <connections>
229
+ <outlet property="dataSource" destination="19" id="22"/>
230
+ <outlet property="delegate" destination="19" id="21"/>
231
+ </connections>
232
+ </tableView>
233
+ <navigationItem key="navigationItem" title="Master" id="40"/>
234
+ </tableViewController>
235
+ <placeholder placeholderIdentifier="IBFirstResponder" id="23" sceneMemberID="firstResponder"/>
236
+ </objects>
237
+ <point key="canvasLocation" x="859" y="-631"/>
238
+ </scene>
239
+ <!--Navigation Controller-->
240
+ <scene sceneID="50">
241
+ <objects>
242
+ <navigationController id="42" sceneMemberID="viewController">
243
+ <navigationBar key="navigationBar" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" id="43">
244
+ <autoresizingMask key="autoresizingMask"/>
245
+ </navigationBar>
246
+ <connections>
247
+ <segue destination="4" kind="relationship" relationship="rootViewController" id="52"/>
248
+ </connections>
249
+ </navigationController>
250
+ <placeholder placeholderIdentifier="IBFirstResponder" id="49" userLabel="First Responder" sceneMemberID="firstResponder"/>
251
+ </objects>
252
+ <point key="canvasLocation" x="-366" y="248"/>
253
+ </scene>
254
+ </scenes>
255
+ <simulatedMetricsContainer key="defaultSimulatedMetrics">
256
+ <simulatedStatusBarMetrics key="statusBar" statusBarStyle="blackTranslucent"/>
257
+ <simulatedOrientationMetrics key="orientation"/>
258
+ <simulatedScreenMetrics key="destination"/>
259
+ </simulatedMetricsContainer>
260
+ </document>