lanekit 0.3.5 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +8 -8
- data/README.md +14 -2
- data/lib/lanekit/generate/model.rb +2 -0
- data/lib/lanekit/generate/provider.rb +3 -3
- data/lib/lanekit/generate/tableviewcontroller.rb +110 -0
- data/lib/lanekit/generate.rb +1 -0
- data/lib/lanekit/version.rb +1 -1
- data/lib/lanekit.rb +15 -0
- data/lib/template/LKFeedCell.h.erb +16 -0
- data/lib/template/LKFeedCell.m.erb +148 -0
- data/lib/template/lanekit-ios-project/lanekit-ios-project/lanekit-ios-project/Controllers/LKAppDelegate.m +4 -6
- data/lib/template/lanekit-ios-project/lanekit-ios-project/lanekit-ios-project/Resources/Base.lproj/Main_iPad.storyboard +3 -116
- data/lib/template/lanekit-ios-project/lanekit-ios-project/lanekit-ios-project/Resources/Base.lproj/Main_iPhone.storyboard +4 -82
- data/lib/template/lanekit-ios-project/lanekit-ios-project/lanekit-ios-project/Resources/placeholder@2x.png +0 -0
- data/lib/template/lanekit-ios-project/lanekit-ios-project/lanekit-ios-project.xcodeproj/project.pbxproj +4 -12
- data/lib/template/lanekit-ios-project/lanekit-ios-project.xcworkspace/xcuserdata/larry.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- data/lib/template/model.m.erb +8 -0
- data/lib/template/model_base.h.erb +2 -0
- data/lib/template/model_base.m.erb +30 -0
- data/lib/template/tvc.h.erb +14 -0
- data/lib/template/tvc.m.erb +158 -0
- metadata +14 -12
- data/lib/template/lanekit-ios-project/lanekit-ios-project/lanekit-ios-project/Controllers/LKDetailViewController.h +0 -12
- data/lib/template/lanekit-ios-project/lanekit-ios-project/lanekit-ios-project/Controllers/LKDetailViewController.m +0 -68
- data/lib/template/lanekit-ios-project/lanekit-ios-project/lanekit-ios-project/Controllers/LKMasterViewController.h +0 -13
- 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
|
-
|
4
|
+
ZTU2MzMwNGYzZDE3YWVjZTI4MWVkZTNiZjg3ZGNiMDI4NmFiZDgyNQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MWI2ZGUxZjc5YzEyYTc3MTYwNzkxZjgxNzQ0NjVkM2NiNzNiZDAxZQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ODJhMmMzNDJiN2MxZTY2NTQ5ZWM2Y2U4YWIxODZiNTg4OTg0NzBhMDMxYmVh
|
10
|
+
YWRkNTlmYzUxZGE0ZTFlODY4NmYxOWRiYzMwZDI2ODNmZTRkNjU2ZWRjYmQ5
|
11
|
+
ZTJjOTNjNzE0NWYzNWIxMDhkMjc4YjE5N2Y3OWMwODdhNTM3Y2U=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NzE3ODIyNWU1ZTRiNWE4YzliNzVhNGI2MDg0NGQ4MTlkMGZmYzNkYzE1NjBh
|
14
|
+
Nzc1NWQ3ZDg0ZmRhYWJjODYzYjQ5YWZlYmFiZmE4NTQ2ZmFlY2M1M2Q5NTUy
|
15
|
+
YTkxOTYzNjEyODc0YjhmZTc0MTAzNzZhY2Y5NzUwMTkyODExNGE=
|
data/README.md
CHANGED
@@ -3,14 +3,14 @@
|
|
3
3
|
[](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
|
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
|
51
|
-
@controllers_group =
|
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
|
data/lib/lanekit/generate.rb
CHANGED
@@ -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
|
data/lib/lanekit/version.rb
CHANGED
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
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
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="
|
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="
|
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="-
|
18
|
+
<point key="canvasLocation" x="-1074" y="-1548"/>
|
132
19
|
</scene>
|
133
20
|
</scenes>
|
134
21
|
<simulatedMetricsContainer key="defaultSimulatedMetrics">
|