lanekit 0.3.5 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (26) hide show
  1. checksums.yaml +8 -8
  2. data/README.md +14 -2
  3. data/lib/lanekit/generate/model.rb +2 -0
  4. data/lib/lanekit/generate/provider.rb +3 -3
  5. data/lib/lanekit/generate/tableviewcontroller.rb +110 -0
  6. data/lib/lanekit/generate.rb +1 -0
  7. data/lib/lanekit/version.rb +1 -1
  8. data/lib/lanekit.rb +15 -0
  9. data/lib/template/LKFeedCell.h.erb +16 -0
  10. data/lib/template/LKFeedCell.m.erb +148 -0
  11. data/lib/template/lanekit-ios-project/lanekit-ios-project/lanekit-ios-project/Controllers/LKAppDelegate.m +4 -6
  12. data/lib/template/lanekit-ios-project/lanekit-ios-project/lanekit-ios-project/Resources/Base.lproj/Main_iPad.storyboard +3 -116
  13. data/lib/template/lanekit-ios-project/lanekit-ios-project/lanekit-ios-project/Resources/Base.lproj/Main_iPhone.storyboard +4 -82
  14. data/lib/template/lanekit-ios-project/lanekit-ios-project/lanekit-ios-project/Resources/placeholder@2x.png +0 -0
  15. data/lib/template/lanekit-ios-project/lanekit-ios-project/lanekit-ios-project.xcodeproj/project.pbxproj +4 -12
  16. data/lib/template/lanekit-ios-project/lanekit-ios-project.xcworkspace/xcuserdata/larry.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  17. data/lib/template/model.m.erb +8 -0
  18. data/lib/template/model_base.h.erb +2 -0
  19. data/lib/template/model_base.m.erb +30 -0
  20. data/lib/template/tvc.h.erb +14 -0
  21. data/lib/template/tvc.m.erb +158 -0
  22. metadata +14 -12
  23. data/lib/template/lanekit-ios-project/lanekit-ios-project/lanekit-ios-project/Controllers/LKDetailViewController.h +0 -12
  24. data/lib/template/lanekit-ios-project/lanekit-ios-project/lanekit-ios-project/Controllers/LKDetailViewController.m +0 -68
  25. data/lib/template/lanekit-ios-project/lanekit-ios-project/lanekit-ios-project/Controllers/LKMasterViewController.h +0 -13
  26. data/lib/template/lanekit-ios-project/lanekit-ios-project/lanekit-ios-project/Controllers/LKMasterViewController.m +0 -122
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NDBjMDYxZWZiNDI0NmIzNGNkODNlMjhhNzRjZmUyYTU3MzU2MjM1Mg==
4
+ ZTU2MzMwNGYzZDE3YWVjZTI4MWVkZTNiZjg3ZGNiMDI4NmFiZDgyNQ==
5
5
  data.tar.gz: !binary |-
6
- ZTdiNGU4NGQxMTFhNjg3OTA0MTc3MjI0YzI5MTU5N2Q1OGI1NjE3Nw==
6
+ MWI2ZGUxZjc5YzEyYTc3MTYwNzkxZjgxNzQ0NjVkM2NiNzNiZDAxZQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- YTRhZmUxYzIzOTViODgxMmRjMWRjYTA4ZTlhZDFhNmE0NTgwMDQzMjExZDJk
10
- ZDg3ZDE2N2FkY2NjZWE1NTBmMDg4MjE4ZDRlNjNlOTk1OTNmMmQ1ZmZkODIz
11
- YzU1MjllMjk2MzU0NWFmNjZjMWIyZWIwOTVkMDU5MmMyMWZhN2I=
9
+ ODJhMmMzNDJiN2MxZTY2NTQ5ZWM2Y2U4YWIxODZiNTg4OTg0NzBhMDMxYmVh
10
+ YWRkNTlmYzUxZGE0ZTFlODY4NmYxOWRiYzMwZDI2ODNmZTRkNjU2ZWRjYmQ5
11
+ ZTJjOTNjNzE0NWYzNWIxMDhkMjc4YjE5N2Y3OWMwODdhNTM3Y2U=
12
12
  data.tar.gz: !binary |-
13
- NzlmOGM3ZmVkZjEzZTVlYjgxYmRkM2QzNjEyODdhZTc5MDY1NjJjMWUxYmI2
14
- YWRmNTUyOWFmYmY3N2RhZGU1ODVjZjdkYTBhZDg0NWE3YjFjZDY2Njc0NzU3
15
- MDZmZDdhODQ3OGRhYTJlNWI2ZjcxMjU5NjgxZDhjZmViYWVhMjI=
13
+ NzE3ODIyNWU1ZTRiNWE4YzliNzVhNGI2MDg0NGQ4MTlkMGZmYzNkYzE1NjBh
14
+ Nzc1NWQ3ZDg0ZmRhYWJjODYzYjQ5YWZlYmFiZmE4NTQ2ZmFlY2M1M2Q5NTUy
15
+ YTkxOTYzNjEyODc0YjhmZTc0MTAzNzZhY2Y5NzUwMTkyODExNGE=
data/README.md CHANGED
@@ -3,14 +3,14 @@
3
3
  [![Gem Version](https://badge.fury.io/rb/lanekit.png)](http://badge.fury.io/rb/lanekit)
4
4
 
5
5
  LaneKit is an iOS Objective-C code generator for integration with [RestKit](https://github.com/RestKit/RestKit). It generates
6
- models, resource providers, and full iOS apps with mimimal effort. There is support for unit testing with SenTestingKit
6
+ models, resource providers, table views, and full iOS apps with mimimal effort. There is support for unit testing with SenTestingKit
7
7
  including fixtures and tests. LaneKit is a command line app written in Ruby and packaged as a Ruby Gem.
8
8
 
9
9
  - [Source code for LaneKit](https://github.com/LarryAasen/LaneKit/zipball/master) from [GitHub](http://github.com).
10
10
  - Questions? [Stack Overflow](http://stackoverflow.com/questions/tagged/lanekit) is the best place to find answers.
11
11
 
12
12
  ## Benefits
13
- * properly implemented models and resource providers
13
+ * properly implemented models, resource providers, and table views
14
14
  * easy integration with RestKit
15
15
  * consistent Objective-C code
16
16
  * unit tests with OCUnit (SenTestingKit)
@@ -276,10 +276,22 @@ and here is a unit test that was generated in Models/VideoTest.m by LaneKit:
276
276
  Integrating client project
277
277
  clean /Users/larry/Projects/lanekit/SportsFrames/SportsFrames.xcworkspace
278
278
 
279
+ ### Add a new UITableViewController called ContentsViewController
280
+ This will display the Contents model that is a list of videos.
281
+
282
+ $ lanekit generate tableviewcontroller Contents -r LKFeedCell
283
+
284
+ create SportsFrames/SportsFrames/Controllers/ContentsViewController.h
285
+ create SportsFrames/SportsFrames/Controllers/ContentsViewController.m
286
+ create SportsFrames/SportsFrames/Views/LKFeedCell.h
287
+ create SportsFrames/SportsFrames/Views/LKFeedCell.m
288
+
279
289
  ### Add the [Urban Airship](https://github.com/urbanairship/ios-library) CocoaPods Pod to the project.
280
290
 
281
291
  $ lanekit generate pod UrbanAirship-iOS-SDK
282
292
 
293
+ Installing UrbanAirship-iOS-SDK (3.0.1)
294
+
283
295
  ### Sample App
284
296
  The SportsFrames app is a fully functional sample app using RestKit created to demonstrate the use of LaneKit in a real world app. It
285
297
  has models and resource providers that are generated from LaneKit.
@@ -22,6 +22,7 @@ module LaneKit
22
22
 
23
23
  @attributes = []
24
24
  @any_relationships = false
25
+ @first_string_attribute = nil
25
26
 
26
27
  attributes.each {|attribute|
27
28
  name, type, relationship = attribute.split(":")
@@ -37,6 +38,7 @@ module LaneKit
37
38
  :unit_test_assert => LaneKit.objective_c_type_unit_test_assert(@model_name, name, type)
38
39
  }
39
40
  @any_relationships = relationship ? true : @any_relationships
41
+ @first_string_attribute = name if !@first_string_attribute && type == 'string'
40
42
  }
41
43
 
42
44
  @lanefile = LaneKit::Lanefile.new
@@ -46,9 +46,9 @@ module LaneKit
46
46
  @provider_base_file_name = "LKResourceProvider"
47
47
 
48
48
  @provider_file_name = @provider_name
49
-
50
- @providers_folder = "#{@lanefile.app_project_name}/#{@lanefile.app_project_name}/Controllers"
51
- @controllers_group = "#{@lanefile.app_project_name}/Controllers"
49
+
50
+ @providers_folder = LaneKit.controllers_folder(@lanefile)
51
+ @controllers_group = LaneKit.controllers_group(@lanefile)
52
52
  end
53
53
 
54
54
  def create_provider_folders
@@ -0,0 +1,110 @@
1
+ module LaneKit
2
+ class Generate
3
+
4
+ include Thor::Actions
5
+
6
+ desc "tableviewcontroller MODEL_NAME [-r LKFeedCell]", "Generates an Objective-C UITableViewController"
7
+ long_desc <<-LONGDESC
8
+ Generates the Objective-C code for a UITableViewController.\n
9
+ MODEL_NAME: the name of the model used to supply data to the controller. Will create <MODEL_NAME>ViewController class.\n
10
+ -r LKFeedCell: register the LKFeedCell class as the class for use in creating new table cells.
11
+ LONGDESC
12
+ option :register, :required => false, :aliases => "-r", :banner => "register the LKFeedCell class as the class for use in creating new table cells"
13
+ def tableviewcontroller(model_name)
14
+ @using_core_data = options[:use_core_data]
15
+ @register_class = options[:register]
16
+
17
+ error = self.validate_register_class(@register_class)
18
+ if error
19
+ say error, :red
20
+ return
21
+ end
22
+
23
+ @model_name = LaneKit.derive_model_name(model_name)
24
+ @lanefile = LaneKit::Lanefile.new
25
+ lanefile_error = LaneKit.validate_lanefile(@lanefile)
26
+ if lanefile_error
27
+ say lanefile_error, :red
28
+ return
29
+ end
30
+ @app_project_path = @lanefile.app_project_path
31
+
32
+ self.initialize_tvc
33
+ self.create_tvc_files
34
+ self.create_register_files
35
+ end
36
+
37
+ no_commands do
38
+
39
+ def initialize_tvc
40
+ @model_class_name = LaneKit.derive_class_name(@model_name)
41
+ @model_file_name = LaneKit.derive_file_name(@model_name)
42
+ @controller_class_name = "#{LaneKit.derive_class_name(@model_name)}ViewController"
43
+ @provider_class_name = "#{LaneKit.derive_class_name(@model_name)}Provider"
44
+ @provider_file_name = @provider_class_name
45
+ @controller_file_name = @controller_class_name
46
+ @controllers_folder = LaneKit.controllers_folder(@lanefile)
47
+ @controllers_group = LaneKit.controllers_group(@lanefile)
48
+ @views_folder = LaneKit.views_folder(@lanefile)
49
+ @views_group = LaneKit.views_group(@lanefile)
50
+
51
+ if !@register_class
52
+ @register_class = "UITableViewCell"
53
+ end
54
+ end
55
+
56
+ def validate_register_class(class_name)
57
+ if class_name
58
+ if class_name.length < 2
59
+ return "class name must be at least two characters long"
60
+ elsif class_name.include? " "
61
+ return "class name cannot include spaces"
62
+ elsif class_name != "LKFeedCell"
63
+ return "class name must be LKFeedCell"
64
+ end
65
+ end
66
+ return nil
67
+ end
68
+
69
+ def create_tvc_files
70
+ # 1) Create the table view controller
71
+ # Create the .h file
72
+ source = "tvc.h.erb"
73
+ target_file = "#{@controller_file_name}.h"
74
+ target = File.join(@controllers_folder, target_file)
75
+ template(source, target, @@template_opts)
76
+
77
+ LaneKit.add_file_to_project("Controllers/"+target_file, @controllers_group, @app_project_path)
78
+
79
+ # Create the .m file
80
+ source = "tvc.m.erb"
81
+ target_file = "#{@controller_file_name}.m"
82
+ target = File.join(@controllers_folder, target_file)
83
+ template(source, target, @@template_opts)
84
+
85
+ LaneKit.add_file_to_project("Controllers/"+target_file, @controllers_group, @app_project_path, "@all")
86
+ end
87
+
88
+ def create_register_files
89
+ return if @register_class != "LKFeedCell"
90
+
91
+ # 1) Create the LKFeedCell class in the Views group
92
+ # Create the .h file
93
+ source = "#{@register_class}.h.erb"
94
+ target_file = "#{@register_class}.h"
95
+ target = File.join(@views_folder, target_file)
96
+ template(source, target, @@template_opts)
97
+
98
+ LaneKit.add_file_to_project("Views/"+target_file, @views_group, @app_project_path)
99
+
100
+ # Create the .m file
101
+ source = "#{@register_class}.m.erb"
102
+ target_file = "#{@register_class}.m"
103
+ target = File.join(@views_folder, target_file)
104
+ template(source, target, @@template_opts)
105
+
106
+ LaneKit.add_file_to_project("Views/"+target_file, @views_group, @app_project_path, "@all")
107
+ end
108
+ end
109
+ end
110
+ end
@@ -38,6 +38,7 @@ class LaneKit::Generate < Thor
38
38
 
39
39
  require 'lanekit/generate/model'
40
40
  require 'lanekit/generate/provider'
41
+ require 'lanekit/generate/tableviewcontroller'
41
42
  require 'lanekit/generate/urbanairship'
42
43
 
43
44
  class_option :use_core_data, :type => :boolean, :default => false, :banner => "generate code compatible with Core Data (the default is false)", :aliases => "-c" # option --use_core_data=true
@@ -1,3 +1,3 @@
1
1
  module LaneKit
2
- VERSION = "0.3.5"
2
+ VERSION = "0.4.1"
3
3
  end
data/lib/lanekit.rb CHANGED
@@ -234,6 +234,21 @@ module LaneKit
234
234
  end
235
235
  end
236
236
 
237
+ def self.controllers_folder(lanefile)
238
+ "#{lanefile.app_project_name}/#{lanefile.app_project_name}/Controllers"
239
+ end
240
+
241
+ def self.controllers_group(lanefile)
242
+ "#{lanefile.app_project_name}/Controllers"
243
+ end
244
+
245
+ def self.views_folder(lanefile)
246
+ "#{lanefile.app_project_name}/#{lanefile.app_project_name}/Views"
247
+ end
248
+
249
+ def self.views_group(lanefile)
250
+ "#{lanefile.app_project_name}/Views"
251
+ end
237
252
  end
238
253
 
239
254
  module LaneKit
@@ -0,0 +1,16 @@
1
+ //
2
+ // <%=@register_class%>.h
3
+ //
4
+ // This model was created on <%=config[:generate_date]%> by LaneKit v<%=config[:lanekit_version]%>.
5
+ //
6
+ // The following LaneKit command was used to generate this file:
7
+ // <%=config[:command]%>
8
+ //
9
+
10
+ #import <UIKit/UIKit.h>
11
+
12
+ @interface <%=@register_class%> : UITableViewCell
13
+
14
+ + (CGFloat)cellHeight;
15
+
16
+ @end
@@ -0,0 +1,148 @@
1
+ //
2
+ // <%=@register_class%>.m
3
+ //
4
+ // This model was created on <%=config[:generate_date]%> by LaneKit v<%=config[:lanekit_version]%>.
5
+ //
6
+ // The following LaneKit command was used to generate this file:
7
+ // <%=config[:command]%>
8
+ //
9
+
10
+ #import "<%=@register_class%>.h"
11
+ #import <QuartzCore/CALayer.h>
12
+ #import <QuartzCore/CAGradientLayer.h>
13
+
14
+ static CGFloat cellHeight = 178;
15
+
16
+ static CGFloat contentMarginTop = 5;
17
+ static CGFloat contentMarginRight = 5;
18
+ static CGFloat contentMarginBottom = 5;
19
+ static CGFloat contentMarginLeft = 5;
20
+
21
+ static CGFloat textMarginRight = 15;
22
+ static CGFloat textMarginBottom = 10;
23
+ static CGFloat textMarginLeft = 15;
24
+
25
+ @interface <%=@register_class%> ()
26
+ {
27
+ CAGradientLayer *gradientLayer;
28
+ UIView *overlayContainer;
29
+ }
30
+
31
+ -(void)addOverlayToView1:(UIView *)view;
32
+ -(void)addOverlayToView2:(UIView *)view;
33
+
34
+ @end
35
+
36
+ @implementation <%=@register_class%>
37
+
38
+ + (CGFloat)cellHeight
39
+ {
40
+ return cellHeight;
41
+ }
42
+
43
+ - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
44
+ {
45
+ self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier];
46
+ if (self) {
47
+ self.imageView.contentMode = UIViewContentModeScaleAspectFit;
48
+
49
+ self.textLabel.backgroundColor = [UIColor clearColor];
50
+ self.textLabel.textColor = [UIColor whiteColor];
51
+ self.textLabel.font = [UIFont boldSystemFontOfSize:14];
52
+ self.textLabel.numberOfLines = 0;
53
+ }
54
+ return self;
55
+ }
56
+
57
+ - (void)makeTopSubview:(UIView *)view
58
+ {
59
+ UIView *superview = [view superview];
60
+ [view removeFromSuperview];
61
+ [superview addSubview:view];
62
+ }
63
+
64
+ - (void)makeTopSubview
65
+ {
66
+ [self makeTopSubview:self];
67
+ }
68
+
69
+ - (void)layoutSubviews
70
+ {
71
+ [super layoutSubviews];
72
+
73
+ CGRect bounds = [self bounds];
74
+ bounds.origin.x = contentMarginLeft;
75
+ bounds.origin.y = contentMarginTop;
76
+ bounds.size.width -= contentMarginRight + contentMarginLeft;
77
+ bounds.size.height -= contentMarginTop + contentMarginBottom;
78
+ [self.contentView setFrame:bounds];
79
+
80
+ if (self.imageView)
81
+ {
82
+ CGRect imageFrame = self.imageView.frame;
83
+ imageFrame.size = bounds.size;
84
+ imageFrame.size.width -= 10;
85
+ imageFrame.origin.x = (bounds.size.width - imageFrame.size.width) / 2.0;
86
+ imageFrame.origin.y = 0;
87
+ self.imageView.frame = CGRectIntegral(imageFrame);
88
+
89
+ self.imageView.layer.cornerRadius = 5;
90
+ self.imageView.layer.masksToBounds= YES;
91
+
92
+ [self addOverlayToView1:self.imageView];
93
+ }
94
+
95
+ CGRect textFrame = self.textLabel.frame;
96
+ textFrame.size.width = bounds.size.width - (textMarginRight + textMarginLeft);
97
+ textFrame.size.height = 100;
98
+ textFrame.origin.x = textMarginRight;
99
+ self.textLabel.frame = textFrame;
100
+ [self.textLabel sizeToFit];
101
+
102
+ textFrame = self.textLabel.frame;
103
+ textFrame.origin.y = bounds.size.height - textFrame.size.height - textMarginBottom;
104
+ self.textLabel.frame = textFrame;
105
+
106
+ [self makeTopSubview:self.textLabel];
107
+ }
108
+
109
+ -(void)addOverlayToView1:(UIView *)view
110
+ {
111
+ if (!gradientLayer)
112
+ {
113
+ gradientLayer = [CAGradientLayer layer];
114
+ [view.layer addSublayer:gradientLayer];
115
+ }
116
+
117
+ CGRect frame = view.bounds;
118
+ frame.size.height = frame.size.height / 2;
119
+ frame.origin.y = frame.size.height;
120
+ gradientLayer.frame = CGRectIntegral(frame);
121
+
122
+ gradientLayer.colors = [NSArray arrayWithObjects:
123
+ (id)[UIColor colorWithWhite:1.0f alpha:0.0f].CGColor,
124
+ (id)[UIColor colorWithWhite:0.0f alpha:0.3f].CGColor,
125
+ (id)[UIColor colorWithWhite:0.0f alpha:0.7f].CGColor,
126
+ nil];
127
+
128
+ gradientLayer.locations = @[[NSNumber numberWithFloat:0.25f], [NSNumber numberWithFloat:0.5f], [NSNumber numberWithFloat:0.7f]];
129
+
130
+ gradientLayer.borderWidth = 0;
131
+ }
132
+
133
+ -(void)addOverlayToView2:(UIView *)view
134
+ {
135
+ if (!overlayContainer)
136
+ {
137
+ overlayContainer = [[UIView alloc] initWithFrame:view.bounds];
138
+ overlayContainer.backgroundColor = [UIColor clearColor];
139
+
140
+ CAGradientLayer *gradient = [CAGradientLayer layer];
141
+ gradient.frame = overlayContainer.bounds;
142
+ gradient.colors = @[(id)[[UIColor blackColor] CGColor], (id)[[UIColor clearColor] CGColor]];
143
+ [overlayContainer.layer insertSublayer:gradient atIndex:0];
144
+ [view addSubview:overlayContainer];
145
+ }
146
+ }
147
+
148
+ @end
@@ -8,12 +8,10 @@
8
8
 
9
9
  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
10
10
  {
11
- // Override point for customization after application launch.
12
- if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
13
- UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController;
14
- UINavigationController *navigationController = [splitViewController.viewControllers lastObject];
15
- splitViewController.delegate = (id)navigationController.topViewController;
16
- }
11
+ UIViewController *controller = UIViewController.new;
12
+ [(UINavigationController *)self.window.rootViewController pushViewController:controller animated:NO];
13
+ controller.navigationItem.title = @"lanekit-ios-project";
14
+
17
15
  return YES;
18
16
  }
19
17
 
@@ -1,120 +1,10 @@
1
1
  <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
- <document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="4510" systemVersion="12F45" targetRuntime="iOS.CocoaTouch.iPad" propertyAccessControl="none" useAutolayout="YES" initialViewController="H1p-Uh-vWS">
2
+ <document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="4514" systemVersion="12F45" targetRuntime="iOS.CocoaTouch.iPad" propertyAccessControl="none" useAutolayout="YES" initialViewController="vC3-pB-5Vb">
3
3
  <dependencies>
4
4
  <deployment defaultVersion="1536" identifier="iOS"/>
5
- <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3742"/>
5
+ <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3746"/>
6
6
  </dependencies>
7
7
  <scenes>
8
- <!--Navigation Controller-->
9
- <scene sceneID="pY4-Hu-kfo">
10
- <objects>
11
- <navigationController id="RMx-3f-FxP" sceneMemberID="viewController">
12
- <navigationBar key="navigationBar" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" id="Pmd-2v-anx">
13
- <autoresizingMask key="autoresizingMask"/>
14
- </navigationBar>
15
- <connections>
16
- <segue destination="7bK-jq-Zjz" kind="relationship" relationship="rootViewController" id="tsl-Nk-0bq"/>
17
- </connections>
18
- </navigationController>
19
- <placeholder placeholderIdentifier="IBFirstResponder" id="8fS-aE-onr" sceneMemberID="firstResponder"/>
20
- </objects>
21
- <point key="canvasLocation" x="448" y="-630"/>
22
- </scene>
23
- <!--Detail View Controller - Detail-->
24
- <scene sceneID="yUG-lL-AsK">
25
- <objects>
26
- <viewController title="Detail" id="JEX-9P-axG" customClass="LKDetailViewController" sceneMemberID="viewController">
27
- <layoutGuides>
28
- <viewControllerLayoutGuide type="top" id="8wd-7d-mFo"/>
29
- <viewControllerLayoutGuide type="bottom" id="gMh-B7-yhi"/>
30
- </layoutGuides>
31
- <view key="view" contentMode="scaleToFill" id="svH-Pt-448">
32
- <rect key="frame" x="0.0" y="0.0" width="703" height="768"/>
33
- <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
34
- <subviews>
35
- <label clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" text="Detail view content goes here" textAlignment="center" lineBreakMode="tailTruncation" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="0XM-y9-sOw">
36
- <rect key="frame" x="20" y="376" width="663" height="17"/>
37
- <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
38
- <fontDescription key="fontDescription" type="system" size="system"/>
39
- <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
40
- <nil key="highlightedColor"/>
41
- </label>
42
- </subviews>
43
- <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
44
- <constraints>
45
- <constraint firstItem="0XM-y9-sOw" firstAttribute="leading" secondItem="svH-Pt-448" secondAttribute="leading" constant="20" symbolic="YES" id="Tsc-yG-G1q"/>
46
- <constraint firstItem="0XM-y9-sOw" firstAttribute="centerY" secondItem="svH-Pt-448" secondAttribute="centerY" id="jWN-iV-94e"/>
47
- <constraint firstAttribute="trailing" secondItem="0XM-y9-sOw" secondAttribute="trailing" constant="20" symbolic="YES" id="tHV-ZD-HQj"/>
48
- </constraints>
49
- <simulatedOrientationMetrics key="simulatedOrientationMetrics" orientation="landscapeRight"/>
50
- </view>
51
- <toolbarItems/>
52
- <navigationItem key="navigationItem" title="Detail" id="mOI-FS-AaM"/>
53
- <connections>
54
- <outlet property="detailDescriptionLabel" destination="0XM-y9-sOw" id="deQ-Na-JPF"/>
55
- </connections>
56
- </viewController>
57
- <placeholder placeholderIdentifier="IBFirstResponder" id="FJe-Yq-33r" sceneMemberID="firstResponder"/>
58
- </objects>
59
- <point key="canvasLocation" x="448" y="248"/>
60
- </scene>
61
- <!--Split View Controller-->
62
- <scene sceneID="Nki-YV-4Qg">
63
- <objects>
64
- <splitViewController id="H1p-Uh-vWS" sceneMemberID="viewController">
65
- <toolbarItems/>
66
- <simulatedStatusBarMetrics key="simulatedStatusBarMetrics" statusBarStyle="blackOpaque"/>
67
- <simulatedOrientationMetrics key="simulatedOrientationMetrics" orientation="landscapeRight"/>
68
- <connections>
69
- <segue destination="RMx-3f-FxP" kind="relationship" relationship="masterViewController" id="BlO-5A-QYV"/>
70
- <segue destination="vC3-pB-5Vb" kind="relationship" relationship="detailViewController" id="Tll-UG-LXB"/>
71
- </connections>
72
- </splitViewController>
73
- <placeholder placeholderIdentifier="IBFirstResponder" id="cZU-Oi-B1e" sceneMemberID="firstResponder"/>
74
- </objects>
75
- <point key="canvasLocation" x="-687" y="-630"/>
76
- </scene>
77
- <!--Master View Controller - Master-->
78
- <scene sceneID="smW-Zh-WAh">
79
- <objects>
80
- <tableViewController title="Master" clearsSelectionOnViewWillAppear="NO" id="7bK-jq-Zjz" customClass="LKMasterViewController" sceneMemberID="viewController">
81
- <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="r7i-6Z-zg0">
82
- <rect key="frame" x="0.0" y="0.0" width="320" height="768"/>
83
- <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
84
- <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
85
- <simulatedOrientationMetrics key="simulatedOrientationMetrics" orientation="landscapeRight"/>
86
- <prototypes>
87
- <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="Cell" textLabel="Arm-wq-HPj" style="IBUITableViewCellStyleDefault" id="WCw-Qf-5nD">
88
- <rect key="frame" x="0.0" y="86" width="320" height="44"/>
89
- <autoresizingMask key="autoresizingMask"/>
90
- <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="WCw-Qf-5nD" id="ydd-e1-P1g">
91
- <rect key="frame" x="0.0" y="0.0" width="320" height="43"/>
92
- <autoresizingMask key="autoresizingMask"/>
93
- <subviews>
94
- <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" text="Title" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Arm-wq-HPj">
95
- <rect key="frame" x="15" y="0.0" width="290" height="43"/>
96
- <autoresizingMask key="autoresizingMask"/>
97
- <fontDescription key="fontDescription" type="boldSystem" pointSize="20"/>
98
- <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
99
- <color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
100
- </label>
101
- </subviews>
102
- </tableViewCellContentView>
103
- <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
104
- </tableViewCell>
105
- </prototypes>
106
- <sections/>
107
- <connections>
108
- <outlet property="dataSource" destination="7bK-jq-Zjz" id="Gho-Na-rnu"/>
109
- <outlet property="delegate" destination="7bK-jq-Zjz" id="RA6-mI-bju"/>
110
- </connections>
111
- </tableView>
112
- <navigationItem key="navigationItem" title="Master" id="Zdf-7t-Un8"/>
113
- </tableViewController>
114
- <placeholder placeholderIdentifier="IBFirstResponder" id="Rux-fX-hf1" sceneMemberID="firstResponder"/>
115
- </objects>
116
- <point key="canvasLocation" x="859" y="-631"/>
117
- </scene>
118
8
  <!--Navigation Controller-->
119
9
  <scene sceneID="r7l-gg-dq7">
120
10
  <objects>
@@ -122,13 +12,10 @@
122
12
  <navigationBar key="navigationBar" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" id="DjV-YW-jjY">
123
13
  <autoresizingMask key="autoresizingMask"/>
124
14
  </navigationBar>
125
- <connections>
126
- <segue destination="JEX-9P-axG" kind="relationship" relationship="rootViewController" id="GKi-kA-LjT"/>
127
- </connections>
128
15
  </navigationController>
129
16
  <placeholder placeholderIdentifier="IBFirstResponder" id="SLD-UC-DBI" userLabel="First Responder" sceneMemberID="firstResponder"/>
130
17
  </objects>
131
- <point key="canvasLocation" x="-366" y="248"/>
18
+ <point key="canvasLocation" x="-1074" y="-1548"/>
132
19
  </scene>
133
20
  </scenes>
134
21
  <simulatedMetricsContainer key="defaultSimulatedMetrics">