lanekit 0.3.5 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
[![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
|
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">
|