furter 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +21 -0
- data/.rspec +2 -0
- data/.travis.yml +2 -0
- data/Changelog +3 -0
- data/Gemfile +3 -0
- data/LICENSE.txt +22 -0
- data/README.md +25 -0
- data/Rakefile +30 -0
- data/app/FurterApp/Frank/features/my_first.feature +12 -0
- data/app/FurterApp/Frank/features/step_definitions/launch_steps.rb +20 -0
- data/app/FurterApp/Frank/features/support/env.rb +8 -0
- data/app/FurterApp/Frank/frankify.xcconfig +6 -0
- data/app/FurterApp/Frank/libCocoaAsyncSocket.a +0 -0
- data/app/FurterApp/Frank/libCocoaAsyncSocketMac.a +0 -0
- data/app/FurterApp/Frank/libCocoaHTTPServer.a +0 -0
- data/app/FurterApp/Frank/libCocoaHTTPServerMac.a +0 -0
- data/app/FurterApp/Frank/libCocoaLumberjack.a +0 -0
- data/app/FurterApp/Frank/libCocoaLumberjackMac.a +0 -0
- data/app/FurterApp/Frank/libFrank.a +0 -0
- data/app/FurterApp/Frank/libFrankMac.a +0 -0
- data/app/FurterApp/Frank/libShelley.a +0 -0
- data/app/FurterApp/Frank/libShelleyMac.a +0 -0
- data/app/FurterApp/FurterApp.xcodeproj/project.pbxproj +807 -0
- data/app/FurterApp/FurterApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- data/app/FurterApp/FurterApp.xcodeproj/project.xcworkspace/xcuserdata/lwilson.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- data/app/FurterApp/FurterApp.xcodeproj/xcuserdata/lwilson.xcuserdatad/xcschemes/FurterApp.xcscheme +86 -0
- data/app/FurterApp/FurterApp.xcodeproj/xcuserdata/lwilson.xcuserdatad/xcschemes/xcschememanagement.plist +22 -0
- data/app/FurterApp/FurterApp/AppDelegate.h +22 -0
- data/app/FurterApp/FurterApp/AppDelegate.m +161 -0
- data/app/FurterApp/FurterApp/Default-568h@2x.png +0 -0
- data/app/FurterApp/FurterApp/Default.png +0 -0
- data/app/FurterApp/FurterApp/Default@2x.png +0 -0
- data/app/FurterApp/FurterApp/DetailViewController.h +23 -0
- data/app/FurterApp/FurterApp/DetailViewController.m +80 -0
- data/app/FurterApp/FurterApp/FurterApp-Info.plist +59 -0
- data/app/FurterApp/FurterApp/FurterApp-Prefix.pch +15 -0
- data/app/FurterApp/FurterApp/FurterApp.xcdatamodeld/.xccurrentversion +8 -0
- data/app/FurterApp/FurterApp/FurterApp.xcdatamodeld/FurterApp.xcdatamodel/contents +9 -0
- data/app/FurterApp/FurterApp/MasterViewController.h +22 -0
- data/app/FurterApp/FurterApp/MasterViewController.m +235 -0
- data/app/FurterApp/FurterApp/en.lproj/InfoPlist.strings +2 -0
- data/app/FurterApp/FurterApp/en.lproj/MainStoryboard_iPad.storyboard +260 -0
- data/app/FurterApp/FurterApp/en.lproj/MainStoryboard_iPhone.storyboard +129 -0
- data/app/FurterApp/FurterApp/main.m +18 -0
- data/cucumber.yml +2 -0
- data/features/button.feature +12 -0
- data/features/label.feature +10 -0
- data/features/navigation.feature +5 -0
- data/features/step_definitions/button_steps.rb +7 -0
- data/features/step_definitions/label_steps.rb +8 -0
- data/features/step_definitions/navigation_steps.rb +7 -0
- data/features/step_definitions/switches_steps.rb +12 -0
- data/features/step_definitions/text_steps.rb +25 -0
- data/features/support/core_ext/string.rb +9 -0
- data/features/support/env.rb +25 -0
- data/features/support/hooks.rb +3 -0
- data/features/support/screens/detail.rb +15 -0
- data/features/support/screens/elsewhere_page.rb +7 -0
- data/features/switches.feature +7 -0
- data/features/text.feature +15 -0
- data/furter.gemspec +26 -0
- data/lib/furter.rb +53 -0
- data/lib/furter/accessors.rb +87 -0
- data/lib/furter/accessors/alert_button.rb +18 -0
- data/lib/furter/accessors/button.rb +17 -0
- data/lib/furter/accessors/label.rb +13 -0
- data/lib/furter/accessors/map_pin.rb +18 -0
- data/lib/furter/accessors/switch.rb +20 -0
- data/lib/furter/accessors/table.rb +15 -0
- data/lib/furter/accessors/table_item.rb +10 -0
- data/lib/furter/accessors/text.rb +27 -0
- data/lib/furter/accessors/view.rb +46 -0
- data/lib/furter/navigation.rb +25 -0
- data/lib/furter/version.rb +3 -0
- data/spec/lib/furter/accessors/button_spec.rb +23 -0
- data/spec/lib/furter/accessors/label_spec.rb +24 -0
- data/spec/lib/furter/accessors/switch_spec.rb +28 -0
- data/spec/lib/furter/accessors/text_spec.rb +39 -0
- data/spec/lib/furter/accessors/view_spec.rb +43 -0
- data/spec/lib/furter/accessors_spec.rb +116 -0
- data/spec/spec_helper.rb +18 -0
- 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,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>
|