rufus 0.5 → 0.6
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/RufusApp/RufusApp.xcodeproj/project.pbxproj +41 -3
- data/RufusApp/RufusApp/RUViewController.h +4 -1
- data/RufusApp/RufusApp/RUViewController.m +13 -0
- data/RufusApp/RufusApp/ScrollChildViewController.h +18 -0
- data/RufusApp/RufusApp/ScrollChildViewController.m +24 -0
- data/RufusApp/RufusApp/ScrollChildViewController.xib +30 -0
- data/RufusApp/RufusApp/ScrollPageViewController.h +13 -0
- data/RufusApp/RufusApp/ScrollPageViewController.m +91 -0
- data/RufusApp/RufusApp/ScrollPageViewController.xib +20 -0
- data/RufusApp/RufusApp/TablePageViewController.h +23 -0
- data/RufusApp/RufusApp/TablePageViewController.m +108 -0
- data/RufusApp/RufusApp/TablePageViewController.xib +75 -0
- data/RufusApp/RufusApp/en.lproj/RUViewController.xib +24 -0
- data/features/rufus.feature +12 -0
- data/features/scroll.feature +10 -0
- data/features/step_definitions/rufus_steps.rb +15 -0
- data/features/step_definitions/scroll_steps.rb +6 -0
- data/features/step_definitions/table_steps.rb +14 -0
- data/features/support/routes.rb +8 -0
- data/features/support/screens/home_page.rb +2 -0
- data/features/support/screens/scroll_page.rb +11 -0
- data/features/support/screens/table_page.rb +14 -0
- data/features/table.feature +13 -0
- data/features/view.feature +1 -1
- data/lib/rufus.rb +21 -0
- data/lib/rufus/accessors/accessors.rb +6 -0
- data/lib/rufus/accessors/table.rb +49 -0
- data/lib/rufus/driver.rb +11 -0
- data/rakefile +4 -1
- data/rufus.gemspec +1 -1
- data/spec/drivers_specs/driver_spec.rb +52 -0
- data/spec/rufus_spec.rb +8 -0
- data/spec/table_spec.rb +34 -0
- metadata +19 -2
checksums.yaml
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
---
|
|
2
2
|
!binary "U0hBMQ==":
|
|
3
3
|
metadata.gz: !binary |-
|
|
4
|
-
|
|
4
|
+
OTRkZjc4ZWVmOGQ0ZTAxMDI2NWJmZWQ4NzY0MzQyYTQ2ZDNjM2IzYw==
|
|
5
5
|
data.tar.gz: !binary |-
|
|
6
|
-
|
|
6
|
+
MmU5YjNmNmQ1OTdmNjBlN2NkZTY5MGUxNzBhYTdkODZhNjNhYzAyOA==
|
|
7
7
|
SHA512:
|
|
8
8
|
metadata.gz: !binary |-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
ZWEzOTc5ZGJkZjU0ZDY1YzgxZjUxYmI4ZDE1NTc5NzNiMDhmODgzMTNmMTAz
|
|
10
|
+
OWM0Y2Y5MGE1ZmJmYzNmOWVmZjExZjYwMGVlNmEyMzk0OGJiZmMyYzVlZDNm
|
|
11
|
+
MjNmOTI2ODZjNTQ4MTM0YzMzNWY1NTQ5OGE4Yjc3MjQwOTAxMGE=
|
|
12
12
|
data.tar.gz: !binary |-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
YzQxMTg5MWVhMDNmN2FhZjNlYjgzZjRkOGQ1MjY5MDJlOThmZGIyMTllYTU1
|
|
14
|
+
YjJmYTU4ZjU5NGU5YTUxYjU5NzlmMGE0YmYwZGIwZGZiNjNlYWJiMzNiYjY4
|
|
15
|
+
NmRkMjUwNDk3MDQxNDQxOGY0ZWJlMGE2ZTJhMjYxNzU0YmJhN2I=
|
|
@@ -7,6 +7,12 @@
|
|
|
7
7
|
objects = {
|
|
8
8
|
|
|
9
9
|
/* Begin PBXBuildFile section */
|
|
10
|
+
B855BA3D1810E9F000B33F42 /* ScrollChildViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B855BA3B1810E9F000B33F42 /* ScrollChildViewController.m */; };
|
|
11
|
+
B855BA3E1810E9F000B33F42 /* ScrollChildViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = B855BA3C1810E9F000B33F42 /* ScrollChildViewController.xib */; };
|
|
12
|
+
B869CCEE1814292E00093724 /* ScrollPageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B869CCEC1814292E00093724 /* ScrollPageViewController.m */; };
|
|
13
|
+
B869CCEF1814292E00093724 /* ScrollPageViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = B869CCED1814292E00093724 /* ScrollPageViewController.xib */; };
|
|
14
|
+
B869CCF31814B62800093724 /* TablePageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B869CCF11814B62800093724 /* TablePageViewController.m */; };
|
|
15
|
+
B869CCF41814B62800093724 /* TablePageViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = B869CCF21814B62800093724 /* TablePageViewController.xib */; };
|
|
10
16
|
B88C11DE17BD550E00A62E9D /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B88C11DD17BD550E00A62E9D /* UIKit.framework */; };
|
|
11
17
|
B88C11E017BD550E00A62E9D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B88C11DF17BD550E00A62E9D /* Foundation.framework */; };
|
|
12
18
|
B88C11E217BD550E00A62E9D /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B88C11E117BD550E00A62E9D /* CoreGraphics.framework */; };
|
|
@@ -44,6 +50,15 @@
|
|
|
44
50
|
/* End PBXContainerItemProxy section */
|
|
45
51
|
|
|
46
52
|
/* Begin PBXFileReference section */
|
|
53
|
+
B855BA3A1810E9F000B33F42 /* ScrollChildViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScrollChildViewController.h; sourceTree = "<group>"; };
|
|
54
|
+
B855BA3B1810E9F000B33F42 /* ScrollChildViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ScrollChildViewController.m; sourceTree = "<group>"; };
|
|
55
|
+
B855BA3C1810E9F000B33F42 /* ScrollChildViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ScrollChildViewController.xib; sourceTree = "<group>"; };
|
|
56
|
+
B869CCEB1814292E00093724 /* ScrollPageViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScrollPageViewController.h; sourceTree = "<group>"; };
|
|
57
|
+
B869CCEC1814292E00093724 /* ScrollPageViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ScrollPageViewController.m; sourceTree = "<group>"; };
|
|
58
|
+
B869CCED1814292E00093724 /* ScrollPageViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ScrollPageViewController.xib; sourceTree = "<group>"; };
|
|
59
|
+
B869CCF01814B62800093724 /* TablePageViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TablePageViewController.h; sourceTree = "<group>"; };
|
|
60
|
+
B869CCF11814B62800093724 /* TablePageViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TablePageViewController.m; sourceTree = "<group>"; };
|
|
61
|
+
B869CCF21814B62800093724 /* TablePageViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = TablePageViewController.xib; sourceTree = "<group>"; };
|
|
47
62
|
B88C11DA17BD550E00A62E9D /* RufusApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = RufusApp.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
48
63
|
B88C11DD17BD550E00A62E9D /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
|
|
49
64
|
B88C11DF17BD550E00A62E9D /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
|
|
@@ -140,9 +155,6 @@
|
|
|
140
155
|
B8F2F16D18026FA00037AD69 /* PageObjectControllers */,
|
|
141
156
|
B88C11EC17BD550E00A62E9D /* RUAppDelegate.h */,
|
|
142
157
|
B88C11ED17BD550E00A62E9D /* RUAppDelegate.m */,
|
|
143
|
-
B88C11F517BD550E00A62E9D /* RUViewController.h */,
|
|
144
|
-
B88C11F617BD550E00A62E9D /* RUViewController.m */,
|
|
145
|
-
B88C11F817BD550E00A62E9D /* RUViewController.xib */,
|
|
146
158
|
B88C11E417BD550E00A62E9D /* Supporting Files */,
|
|
147
159
|
);
|
|
148
160
|
path = RufusApp;
|
|
@@ -181,6 +193,18 @@
|
|
|
181
193
|
name = "Supporting Files";
|
|
182
194
|
sourceTree = "<group>";
|
|
183
195
|
};
|
|
196
|
+
B8B8FA9A1810FF1B00E3BCA3 /* OtherViewControllers */ = {
|
|
197
|
+
isa = PBXGroup;
|
|
198
|
+
children = (
|
|
199
|
+
B88C11F517BD550E00A62E9D /* RUViewController.h */,
|
|
200
|
+
B88C11F617BD550E00A62E9D /* RUViewController.m */,
|
|
201
|
+
B88C11F817BD550E00A62E9D /* RUViewController.xib */,
|
|
202
|
+
B855BA3A1810E9F000B33F42 /* ScrollChildViewController.h */,
|
|
203
|
+
B855BA3B1810E9F000B33F42 /* ScrollChildViewController.m */,
|
|
204
|
+
);
|
|
205
|
+
name = OtherViewControllers;
|
|
206
|
+
sourceTree = "<group>";
|
|
207
|
+
};
|
|
184
208
|
B8F2F16D18026FA00037AD69 /* PageObjectControllers */ = {
|
|
185
209
|
isa = PBXGroup;
|
|
186
210
|
children = (
|
|
@@ -196,6 +220,14 @@
|
|
|
196
220
|
B88C121817BD55BB00A62E9D /* RufusPageViewController.h */,
|
|
197
221
|
B88C121917BD55BB00A62E9D /* RufusPageViewController.m */,
|
|
198
222
|
B88C121A17BD55BB00A62E9D /* RufusPageViewController.xib */,
|
|
223
|
+
B855BA3C1810E9F000B33F42 /* ScrollChildViewController.xib */,
|
|
224
|
+
B869CCEB1814292E00093724 /* ScrollPageViewController.h */,
|
|
225
|
+
B869CCEC1814292E00093724 /* ScrollPageViewController.m */,
|
|
226
|
+
B869CCED1814292E00093724 /* ScrollPageViewController.xib */,
|
|
227
|
+
B8B8FA9A1810FF1B00E3BCA3 /* OtherViewControllers */,
|
|
228
|
+
B869CCF01814B62800093724 /* TablePageViewController.h */,
|
|
229
|
+
B869CCF11814B62800093724 /* TablePageViewController.m */,
|
|
230
|
+
B869CCF21814B62800093724 /* TablePageViewController.xib */,
|
|
199
231
|
);
|
|
200
232
|
name = PageObjectControllers;
|
|
201
233
|
sourceTree = "<group>";
|
|
@@ -272,12 +304,15 @@
|
|
|
272
304
|
isa = PBXResourcesBuildPhase;
|
|
273
305
|
buildActionMask = 2147483647;
|
|
274
306
|
files = (
|
|
307
|
+
B855BA3E1810E9F000B33F42 /* ScrollChildViewController.xib in Resources */,
|
|
275
308
|
B88C11E817BD550E00A62E9D /* InfoPlist.strings in Resources */,
|
|
276
309
|
B88C11F017BD550E00A62E9D /* Default.png in Resources */,
|
|
277
310
|
B88C11F217BD550E00A62E9D /* Default@2x.png in Resources */,
|
|
311
|
+
B869CCF41814B62800093724 /* TablePageViewController.xib in Resources */,
|
|
278
312
|
B88C11F417BD550E00A62E9D /* Default-568h@2x.png in Resources */,
|
|
279
313
|
B88C11FA17BD550E00A62E9D /* RUViewController.xib in Resources */,
|
|
280
314
|
B8F2F172180270290037AD69 /* EnabledPageViewController.xib in Resources */,
|
|
315
|
+
B869CCEF1814292E00093724 /* ScrollPageViewController.xib in Resources */,
|
|
281
316
|
B8F2F1771802703D0037AD69 /* DisplayedPageViewController.xib in Resources */,
|
|
282
317
|
B8F2F16C180255FE0037AD69 /* ExistsPageViewController.xib in Resources */,
|
|
283
318
|
B88C121C17BD55BB00A62E9D /* RufusPageViewController.xib in Resources */,
|
|
@@ -315,9 +350,12 @@
|
|
|
315
350
|
isa = PBXSourcesBuildPhase;
|
|
316
351
|
buildActionMask = 2147483647;
|
|
317
352
|
files = (
|
|
353
|
+
B855BA3D1810E9F000B33F42 /* ScrollChildViewController.m in Sources */,
|
|
318
354
|
B88C11EA17BD550E00A62E9D /* main.m in Sources */,
|
|
355
|
+
B869CCF31814B62800093724 /* TablePageViewController.m in Sources */,
|
|
319
356
|
B88C11EE17BD550E00A62E9D /* RUAppDelegate.m in Sources */,
|
|
320
357
|
B88C11F717BD550E00A62E9D /* RUViewController.m in Sources */,
|
|
358
|
+
B869CCEE1814292E00093724 /* ScrollPageViewController.m in Sources */,
|
|
321
359
|
B88C121B17BD55BB00A62E9D /* RufusPageViewController.m in Sources */,
|
|
322
360
|
B8F2F16B180255FE0037AD69 /* ExistsPageViewController.m in Sources */,
|
|
323
361
|
B8F2F171180270290037AD69 /* EnabledPageViewController.m in Sources */,
|
|
@@ -15,12 +15,15 @@
|
|
|
15
15
|
@property (weak, nonatomic) IBOutlet UIButton *showAlertButton;
|
|
16
16
|
@property (weak, nonatomic) IBOutlet UIButton *rufusButton;
|
|
17
17
|
@property (weak, nonatomic) IBOutlet UIButton *enabledPageButton;
|
|
18
|
+
@property (weak, nonatomic) IBOutlet UIButton *scrollPageButton;
|
|
19
|
+
@property (weak, nonatomic) IBOutlet UIButton *tablePageButton;
|
|
18
20
|
|
|
19
21
|
- (IBAction)toEnabledPage:(id)sender;
|
|
20
22
|
- (IBAction)toRufusPage:(id)sender;
|
|
21
23
|
- (IBAction)showAlert:(id)sender;
|
|
22
24
|
- (IBAction)toExistsPage:(id)sender;
|
|
23
25
|
- (IBAction)toDisplayedPage:(id)sender;
|
|
24
|
-
|
|
26
|
+
- (IBAction)toSwipePage:(id)sender;
|
|
27
|
+
- (IBAction)toTablePage:(id)sender;
|
|
25
28
|
|
|
26
29
|
@end
|
|
@@ -11,6 +11,9 @@
|
|
|
11
11
|
#import "ExistsPageViewController.h"
|
|
12
12
|
#import "DisplayedPageViewController.h"
|
|
13
13
|
#import "EnabledPageViewController.h"
|
|
14
|
+
#import "ScrollPageViewController.h"
|
|
15
|
+
#import "TablePageViewController.h"
|
|
16
|
+
|
|
14
17
|
|
|
15
18
|
@interface RUViewController ()
|
|
16
19
|
|
|
@@ -59,6 +62,16 @@
|
|
|
59
62
|
[[self navigationController] pushViewController:displayedPageViewController animated:YES];
|
|
60
63
|
}
|
|
61
64
|
|
|
65
|
+
- (IBAction)toSwipePage:(id)sender {
|
|
66
|
+
ScrollPageViewController *scrollPageViewController = [[ScrollPageViewController alloc] init];
|
|
67
|
+
[[self navigationController] pushViewController:scrollPageViewController animated:YES];
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
- (IBAction)toTablePage:(id)sender {
|
|
71
|
+
TablePageViewController *tablePageViewController = [[TablePageViewController alloc] init];
|
|
72
|
+
[[self navigationController] pushViewController:tablePageViewController animated:YES];
|
|
73
|
+
}
|
|
74
|
+
|
|
62
75
|
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
|
|
63
76
|
{
|
|
64
77
|
if (buttonIndex == [alertView cancelButtonIndex])
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
//
|
|
2
|
+
// ScrollPageViewController.h
|
|
3
|
+
// RufusApp
|
|
4
|
+
//
|
|
5
|
+
// Created by Jeremy Stewart on 10/18/13.
|
|
6
|
+
// Copyright (c) 2013 Northwoods. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
#import <UIKit/UIKit.h>
|
|
10
|
+
|
|
11
|
+
@interface ScrollChildViewController : UIViewController
|
|
12
|
+
|
|
13
|
+
@property (assign, nonatomic) NSInteger index;
|
|
14
|
+
@property (weak, nonatomic) IBOutlet UILabel *screenNumber;
|
|
15
|
+
|
|
16
|
+
-(void)setIndexLabel:(int) index;
|
|
17
|
+
|
|
18
|
+
@end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
//
|
|
2
|
+
// ScrollPageViewController.m
|
|
3
|
+
// RufusApp
|
|
4
|
+
//
|
|
5
|
+
// Created by Jeremy Stewart on 10/18/13.
|
|
6
|
+
// Copyright (c) 2013 Northwoods. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
#import "ScrollChildViewController.h"
|
|
10
|
+
|
|
11
|
+
@interface ScrollChildViewController ()
|
|
12
|
+
|
|
13
|
+
@end
|
|
14
|
+
|
|
15
|
+
@implementation ScrollChildViewController
|
|
16
|
+
@synthesize screenNumber;
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
-(void)setIndexLabel:(int) index
|
|
20
|
+
{
|
|
21
|
+
[[self screenNumber] setText:[NSString stringWithFormat:@"Screen #%d", index]];
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
2
|
+
<document type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="3.0" toolsVersion="4510" systemVersion="12F45" targetRuntime="iOS.CocoaTouch.iPad" propertyAccessControl="none" useAutolayout="YES">
|
|
3
|
+
<dependencies>
|
|
4
|
+
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3742"/>
|
|
5
|
+
</dependencies>
|
|
6
|
+
<objects>
|
|
7
|
+
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="ScrollChildViewController">
|
|
8
|
+
<connections>
|
|
9
|
+
<outlet property="screenNumber" destination="Xxs-ch-qjw" id="iZf-B6-JX8"/>
|
|
10
|
+
<outlet property="view" destination="2" id="3"/>
|
|
11
|
+
</connections>
|
|
12
|
+
</placeholder>
|
|
13
|
+
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
|
|
14
|
+
<view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="2">
|
|
15
|
+
<rect key="frame" x="0.0" y="0.0" width="768" height="1004"/>
|
|
16
|
+
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
|
17
|
+
<subviews>
|
|
18
|
+
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Screen #n" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Xxs-ch-qjw">
|
|
19
|
+
<rect key="frame" x="290" y="412" width="189" height="61"/>
|
|
20
|
+
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
|
21
|
+
<fontDescription key="fontDescription" type="system" pointSize="40"/>
|
|
22
|
+
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
|
|
23
|
+
<nil key="highlightedColor"/>
|
|
24
|
+
</label>
|
|
25
|
+
</subviews>
|
|
26
|
+
<color key="backgroundColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
|
|
27
|
+
<simulatedStatusBarMetrics key="simulatedStatusBarMetrics" statusBarStyle="lightContent"/>
|
|
28
|
+
</view>
|
|
29
|
+
</objects>
|
|
30
|
+
</document>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
//
|
|
2
|
+
// ScrollPageViewController.h
|
|
3
|
+
// RufusApp
|
|
4
|
+
//
|
|
5
|
+
// Created by Jeremy Stewart on 10/20/13.
|
|
6
|
+
// Copyright (c) 2013 Northwoods. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
#import <UIKit/UIKit.h>
|
|
10
|
+
|
|
11
|
+
@interface ScrollPageViewController : UIViewController
|
|
12
|
+
|
|
13
|
+
@end
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
//
|
|
2
|
+
// ScrollPageViewController.m
|
|
3
|
+
// RufusApp
|
|
4
|
+
//
|
|
5
|
+
// Created by Jeremy Stewart on 10/20/13.
|
|
6
|
+
// Copyright (c) 2013 Northwoods. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
#import "ScrollPageViewController.h"
|
|
10
|
+
#import "ScrollChildViewController.h"
|
|
11
|
+
|
|
12
|
+
@interface ScrollPageViewController ()
|
|
13
|
+
|
|
14
|
+
@end
|
|
15
|
+
|
|
16
|
+
@implementation ScrollPageViewController
|
|
17
|
+
|
|
18
|
+
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
|
|
19
|
+
{
|
|
20
|
+
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
|
|
21
|
+
if (self) {
|
|
22
|
+
// Custom initialization
|
|
23
|
+
}
|
|
24
|
+
return self;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
- (void)viewDidLoad
|
|
28
|
+
{
|
|
29
|
+
[super viewDidLoad];
|
|
30
|
+
// Do any additional setup after loading the view from its nib.
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
- (void)didReceiveMemoryWarning
|
|
34
|
+
{
|
|
35
|
+
[super didReceiveMemoryWarning];
|
|
36
|
+
// Dispose of any resources that can be recreated.
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
-(void)loadView
|
|
40
|
+
{
|
|
41
|
+
[super loadView];
|
|
42
|
+
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
|
|
43
|
+
[scrollView setPagingEnabled:YES];
|
|
44
|
+
|
|
45
|
+
[scrollView addSubview:[self getChildViewForIndex:1]];
|
|
46
|
+
[scrollView addSubview:[self getChildViewForIndex:2]];
|
|
47
|
+
[scrollView addSubview:[self getChildViewForIndex:3]];
|
|
48
|
+
|
|
49
|
+
float childWidth = [self getChildViewForIndex:0].frame.size.width;
|
|
50
|
+
float childHeight = [self getChildViewForIndex:0].frame.size.height;
|
|
51
|
+
|
|
52
|
+
[scrollView setContentSize:CGSizeMake(childWidth * 3, childHeight)];
|
|
53
|
+
|
|
54
|
+
[[self view] addSubview:scrollView];
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
-(UIView *)getChildViewForIndex:(int) index
|
|
58
|
+
{
|
|
59
|
+
ScrollChildViewController *childViewController = [[ScrollChildViewController alloc] initWithNibName:@"ScrollChildViewController" bundle:nil];
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
UIView *view = [childViewController view];
|
|
63
|
+
|
|
64
|
+
switch (index) {
|
|
65
|
+
case 1:
|
|
66
|
+
[view setBackgroundColor:[UIColor blueColor]];
|
|
67
|
+
[childViewController setIndexLabel:index];
|
|
68
|
+
break;
|
|
69
|
+
case 2:
|
|
70
|
+
{
|
|
71
|
+
[view setBackgroundColor:[UIColor redColor]];
|
|
72
|
+
CGRect frame = CGRectMake([self view].frame.size.width, 0, [self view].frame.size.width, [self view].frame.size.height);
|
|
73
|
+
[view setFrame:frame];
|
|
74
|
+
[childViewController setIndexLabel:index];
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
case 3:
|
|
78
|
+
{
|
|
79
|
+
[view setBackgroundColor:[UIColor greenColor]];
|
|
80
|
+
CGRect frame = CGRectMake([self view].frame.size.width * 2, 0, [self view].frame.size.width, [self view].frame.size.height);
|
|
81
|
+
[view setFrame:frame];
|
|
82
|
+
[childViewController setIndexLabel:index];
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
default:
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
return [childViewController view];
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
@end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
2
|
+
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="4437" systemVersion="13A451" targetRuntime="iOS.CocoaTouch.iPad" propertyAccessControl="none" useAutolayout="YES">
|
|
3
|
+
<dependencies>
|
|
4
|
+
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3662"/>
|
|
5
|
+
</dependencies>
|
|
6
|
+
<objects>
|
|
7
|
+
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="ScrollPageViewController">
|
|
8
|
+
<connections>
|
|
9
|
+
<outlet property="view" destination="2" id="3"/>
|
|
10
|
+
</connections>
|
|
11
|
+
</placeholder>
|
|
12
|
+
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
|
|
13
|
+
<view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="2">
|
|
14
|
+
<rect key="frame" x="0.0" y="20" width="768" height="1004"/>
|
|
15
|
+
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
|
16
|
+
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
|
17
|
+
<simulatedStatusBarMetrics key="simulatedStatusBarMetrics" statusBarStyle="blackTranslucent"/>
|
|
18
|
+
</view>
|
|
19
|
+
</objects>
|
|
20
|
+
</document>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
//
|
|
2
|
+
// TablePageViewController.h
|
|
3
|
+
// RufusApp
|
|
4
|
+
//
|
|
5
|
+
// Created by Jeremy Stewart on 10/20/13.
|
|
6
|
+
// Copyright (c) 2013 Northwoods. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
#import <UIKit/UIKit.h>
|
|
10
|
+
|
|
11
|
+
@interface TablePageViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
|
|
12
|
+
{
|
|
13
|
+
NSArray *labels;
|
|
14
|
+
NSArray *unsorted;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
@property (weak, nonatomic) IBOutlet UITableView *ascending;
|
|
18
|
+
@property (weak, nonatomic) IBOutlet UITableView *descending;
|
|
19
|
+
@property (weak, nonatomic) IBOutlet UILabel *sortedLabel;
|
|
20
|
+
@property (weak, nonatomic) IBOutlet UILabel *unsortedLabel;
|
|
21
|
+
@property (weak, nonatomic) IBOutlet UITableView *notSorted;
|
|
22
|
+
|
|
23
|
+
@end
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
//
|
|
2
|
+
// TablePageViewController.m
|
|
3
|
+
// RufusApp
|
|
4
|
+
//
|
|
5
|
+
// Created by Jeremy Stewart on 10/20/13.
|
|
6
|
+
// Copyright (c) 2013 Northwoods. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
#import "TablePageViewController.h"
|
|
10
|
+
|
|
11
|
+
@interface TablePageViewController ()
|
|
12
|
+
|
|
13
|
+
@end
|
|
14
|
+
|
|
15
|
+
@implementation TablePageViewController
|
|
16
|
+
@synthesize ascending, descending, notSorted;
|
|
17
|
+
|
|
18
|
+
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
|
|
19
|
+
{
|
|
20
|
+
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
|
|
21
|
+
if (self) {
|
|
22
|
+
labels = [self makeLabels];
|
|
23
|
+
|
|
24
|
+
}
|
|
25
|
+
return self;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
-(void)viewWillAppear:(BOOL)animated
|
|
29
|
+
{
|
|
30
|
+
[super viewWillAppear:animated];
|
|
31
|
+
[ascending setAccessibilityLabel:@"ascending"];
|
|
32
|
+
[descending setAccessibilityLabel:@"descending"];
|
|
33
|
+
[notSorted setAccessibilityLabel:@"notSorted"];
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
|
|
37
|
+
{
|
|
38
|
+
return 1;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
|
|
42
|
+
{
|
|
43
|
+
return [labels count];
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
|
|
47
|
+
{
|
|
48
|
+
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
|
|
49
|
+
if (!cell) {
|
|
50
|
+
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
|
|
51
|
+
}
|
|
52
|
+
NSLog(@"%@", [tableView accessibilityLabel]);
|
|
53
|
+
|
|
54
|
+
if ([[tableView accessibilityLabel] isEqualToString:[ascending accessibilityLabel]]) {
|
|
55
|
+
UILabel *text = [labels objectAtIndex:[indexPath row]];
|
|
56
|
+
[[cell textLabel] setText:[text text]];
|
|
57
|
+
} else if ([[tableView accessibilityLabel] isEqualToString:[descending accessibilityLabel]]) {
|
|
58
|
+
UILabel *text = [labels objectAtIndex:([labels count] - 1) - [indexPath row]];
|
|
59
|
+
[[cell textLabel] setText:[text text]];
|
|
60
|
+
} else {
|
|
61
|
+
if ([indexPath row] % 2 == 0) {
|
|
62
|
+
[[cell textLabel] setText:@"x"];
|
|
63
|
+
} else {
|
|
64
|
+
[[cell textLabel] setText:@"j"];
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return cell;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
-(NSArray *) makeLabels
|
|
73
|
+
{
|
|
74
|
+
|
|
75
|
+
UILabel *one = [[UILabel alloc] init];
|
|
76
|
+
[one setText:@"1"];
|
|
77
|
+
UILabel *two = [[UILabel alloc] init];
|
|
78
|
+
[two setText:@"2"];
|
|
79
|
+
UILabel *three = [[UILabel alloc] init];
|
|
80
|
+
[three setText:@"3"];
|
|
81
|
+
|
|
82
|
+
UILabel *a = [[UILabel alloc] init];
|
|
83
|
+
[a setText:@"a"];
|
|
84
|
+
UILabel *b = [[UILabel alloc] init];
|
|
85
|
+
[b setText:@"b"];
|
|
86
|
+
UILabel *c = [[UILabel alloc] init];
|
|
87
|
+
[c setText:@"c"];
|
|
88
|
+
UILabel *d = [[UILabel alloc] init];
|
|
89
|
+
[d setText:@"d"];
|
|
90
|
+
UILabel *e = [[UILabel alloc] init];
|
|
91
|
+
[e setText:@"e"];
|
|
92
|
+
|
|
93
|
+
NSMutableArray *tableLabels = [[NSMutableArray alloc] init];
|
|
94
|
+
[tableLabels addObject:one];
|
|
95
|
+
[tableLabels addObject:two];
|
|
96
|
+
[tableLabels addObject:three];
|
|
97
|
+
[tableLabels addObject:a];
|
|
98
|
+
[tableLabels addObject:b];
|
|
99
|
+
[tableLabels addObject:c];
|
|
100
|
+
[tableLabels addObject:d];
|
|
101
|
+
[tableLabels addObject:e];
|
|
102
|
+
|
|
103
|
+
return tableLabels;
|
|
104
|
+
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
@end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
2
|
+
<document type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="3.0" toolsVersion="4510" systemVersion="12F45" targetRuntime="iOS.CocoaTouch.iPad" propertyAccessControl="none" useAutolayout="YES">
|
|
3
|
+
<dependencies>
|
|
4
|
+
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3742"/>
|
|
5
|
+
</dependencies>
|
|
6
|
+
<objects>
|
|
7
|
+
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="TablePageViewController">
|
|
8
|
+
<connections>
|
|
9
|
+
<outlet property="ascending" destination="kZD-bA-3M9" id="9YH-ox-6m4"/>
|
|
10
|
+
<outlet property="descending" destination="bFd-cR-AnT" id="eBV-Hh-9s9"/>
|
|
11
|
+
<outlet property="notSorted" destination="uNl-JB-Y7y" id="qUm-f4-Dvn"/>
|
|
12
|
+
<outlet property="sortedLabel" destination="y3W-to-ma5" id="BFf-Dd-ctn"/>
|
|
13
|
+
<outlet property="unsortedLabel" destination="D79-jP-phq" id="KXO-Qp-Qgv"/>
|
|
14
|
+
<outlet property="view" destination="2" id="3"/>
|
|
15
|
+
</connections>
|
|
16
|
+
</placeholder>
|
|
17
|
+
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
|
|
18
|
+
<view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="2">
|
|
19
|
+
<rect key="frame" x="0.0" y="0.0" width="768" height="1004"/>
|
|
20
|
+
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
|
21
|
+
<subviews>
|
|
22
|
+
<tableView clipsSubviews="YES" contentMode="scaleToFill" fixedFrame="YES" alwaysBounceVertical="YES" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" translatesAutoresizingMaskIntoConstraints="NO" id="kZD-bA-3M9">
|
|
23
|
+
<rect key="frame" x="42" y="162" width="150" height="467"/>
|
|
24
|
+
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
|
25
|
+
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
|
26
|
+
<connections>
|
|
27
|
+
<outlet property="dataSource" destination="-1" id="LFA-Si-hjw"/>
|
|
28
|
+
<outlet property="delegate" destination="-1" id="mZE-tT-AJ1"/>
|
|
29
|
+
</connections>
|
|
30
|
+
</tableView>
|
|
31
|
+
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Ascending" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="y3W-to-ma5">
|
|
32
|
+
<rect key="frame" x="69" y="114" width="81" height="21"/>
|
|
33
|
+
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
|
34
|
+
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
|
35
|
+
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
|
36
|
+
<nil key="highlightedColor"/>
|
|
37
|
+
</label>
|
|
38
|
+
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Unsorted" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="SsI-ER-Hih">
|
|
39
|
+
<rect key="frame" x="294" y="114" width="71" height="21"/>
|
|
40
|
+
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
|
41
|
+
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
|
42
|
+
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
|
43
|
+
<nil key="highlightedColor"/>
|
|
44
|
+
</label>
|
|
45
|
+
<tableView clipsSubviews="YES" contentMode="scaleToFill" fixedFrame="YES" alwaysBounceVertical="YES" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" translatesAutoresizingMaskIntoConstraints="NO" id="bFd-cR-AnT">
|
|
46
|
+
<rect key="frame" x="503" y="162" width="150" height="467"/>
|
|
47
|
+
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
|
48
|
+
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
|
49
|
+
<connections>
|
|
50
|
+
<outlet property="dataSource" destination="-1" id="xoA-JK-lwY"/>
|
|
51
|
+
<outlet property="delegate" destination="-1" id="Yuo-gb-oXe"/>
|
|
52
|
+
</connections>
|
|
53
|
+
</tableView>
|
|
54
|
+
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Descending" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="D79-jP-phq">
|
|
55
|
+
<rect key="frame" x="543" y="114" width="92" height="21"/>
|
|
56
|
+
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
|
57
|
+
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
|
58
|
+
<nil key="highlightedColor"/>
|
|
59
|
+
</label>
|
|
60
|
+
<tableView clipsSubviews="YES" contentMode="scaleToFill" fixedFrame="YES" alwaysBounceVertical="YES" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" translatesAutoresizingMaskIntoConstraints="NO" id="uNl-JB-Y7y">
|
|
61
|
+
<rect key="frame" x="227" y="166" width="228" height="460"/>
|
|
62
|
+
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
|
63
|
+
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
|
64
|
+
<connections>
|
|
65
|
+
<outlet property="dataSource" destination="-1" id="Oy2-GU-eZX"/>
|
|
66
|
+
<outlet property="delegate" destination="-1" id="LLv-JY-nfq"/>
|
|
67
|
+
</connections>
|
|
68
|
+
</tableView>
|
|
69
|
+
</subviews>
|
|
70
|
+
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
|
71
|
+
<accessibility key="accessibilityConfiguration" label="tableView"/>
|
|
72
|
+
<simulatedStatusBarMetrics key="simulatedStatusBarMetrics" statusBarStyle="lightContent"/>
|
|
73
|
+
</view>
|
|
74
|
+
</objects>
|
|
75
|
+
</document>
|
|
@@ -10,7 +10,9 @@
|
|
|
10
10
|
<outlet property="enabledPageButton" destination="8Xe-wy-gw2" id="mNp-pl-GZO"/>
|
|
11
11
|
<outlet property="existsPageButton" destination="ptK-30-J0y" id="eem-Ie-lJP"/>
|
|
12
12
|
<outlet property="rufusButton" destination="4" id="11"/>
|
|
13
|
+
<outlet property="scrollPageButton" destination="Trw-jM-66l" id="lPV-bJ-geS"/>
|
|
13
14
|
<outlet property="showAlertButton" destination="VTc-fX-2Iw" id="ndi-Zu-qSy"/>
|
|
15
|
+
<outlet property="tablePageButton" destination="dE6-Ap-U8w" id="rGg-Yd-dCs"/>
|
|
14
16
|
<outlet property="view" destination="2" id="3"/>
|
|
15
17
|
</connections>
|
|
16
18
|
</placeholder>
|
|
@@ -93,6 +95,28 @@
|
|
|
93
95
|
<action selector="toDisplayedPage:" destination="-1" eventType="touchUpInside" id="hho-oP-47b"/>
|
|
94
96
|
</connections>
|
|
95
97
|
</button>
|
|
98
|
+
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Trw-jM-66l">
|
|
99
|
+
<rect key="frame" x="315" y="472" width="132" height="30"/>
|
|
100
|
+
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
|
101
|
+
<accessibility key="accessibilityConfiguration" label="swipePageButton"/>
|
|
102
|
+
<state key="normal" title="Swipe Page Button">
|
|
103
|
+
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
|
104
|
+
</state>
|
|
105
|
+
<connections>
|
|
106
|
+
<action selector="toSwipePage:" destination="-1" eventType="touchUpInside" id="1Hg-Xm-nsi"/>
|
|
107
|
+
</connections>
|
|
108
|
+
</button>
|
|
109
|
+
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="dE6-Ap-U8w">
|
|
110
|
+
<rect key="frame" x="318" y="510" width="126" height="30"/>
|
|
111
|
+
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
|
112
|
+
<accessibility key="accessibilityConfiguration" label="tablePageButton"/>
|
|
113
|
+
<state key="normal" title="Table Page Button">
|
|
114
|
+
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
|
115
|
+
</state>
|
|
116
|
+
<connections>
|
|
117
|
+
<action selector="toTablePage:" destination="-1" eventType="touchUpInside" id="hgd-Rn-c0B"/>
|
|
118
|
+
</connections>
|
|
119
|
+
</button>
|
|
96
120
|
</subviews>
|
|
97
121
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
|
98
122
|
<constraints>
|
data/features/rufus.feature
CHANGED
|
@@ -17,4 +17,16 @@ Feature: Using Rufus
|
|
|
17
17
|
Scenario: Getting page elements by class
|
|
18
18
|
Then I can get a list of the buttons
|
|
19
19
|
|
|
20
|
+
Scenario: Waiting for a view defined by a hash to be enabled
|
|
21
|
+
Given I have navigated to the "EnabledPage" using the "to_enabled" route
|
|
22
|
+
Then I can use a hash to wait for "enabledTextField" to become enabled
|
|
23
|
+
And I see that the "notEnabledTextField" is never enabled
|
|
20
24
|
|
|
25
|
+
Scenario: Waiting for a view defined by a hash to exist
|
|
26
|
+
Given I have navigated to the "ExistsPage" using the "to_exists" route
|
|
27
|
+
Then I can use a hash to wait for the "This Alert Exists" view to exist
|
|
28
|
+
|
|
29
|
+
Scenario: Waiting for a view defined by a hash to be displayed
|
|
30
|
+
Given I have navigated to the "DisplayedPage" using the "to_displayed" route
|
|
31
|
+
Then I can use a hash to wait for the "Mystery Label" to be displayed
|
|
32
|
+
And I see that the "Invisible Label" is never displayed
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
@swipe
|
|
2
|
+
Feature: Swiping the screen
|
|
3
|
+
|
|
4
|
+
Background:
|
|
5
|
+
Given I rotate the app to "portrait"
|
|
6
|
+
|
|
7
|
+
Scenario: Swiping to the right
|
|
8
|
+
Given I have navigated to the "ScrollPage" using the "to_scroll" route
|
|
9
|
+
When I scroll to the right on the view defined "Screen #3"
|
|
10
|
+
Then I can see I scrolled to the view named "Screen #3"
|
|
@@ -12,4 +12,19 @@ Then(/^I can get a list of the buttons$/) do
|
|
|
12
12
|
elements_of_type('UIAButton').each do |element|
|
|
13
13
|
element.class.name.should eq('Selenium::WebDriver::Element')
|
|
14
14
|
end
|
|
15
|
+
end
|
|
16
|
+
Then(/^I can use a hash to wait for "([^"]*)" to become enabled$/) do |which|
|
|
17
|
+
enabled_hash_after_wait?(:name => "#{which}").should be_true
|
|
18
|
+
end
|
|
19
|
+
Then(/^I can use a hash to wait for the "([^"]*)" view to exist$/) do |which|
|
|
20
|
+
exists_hash_after_wait?(:name => "#{which}").should be_true
|
|
21
|
+
end
|
|
22
|
+
Then(/^I can use a hash to wait for the "([^"]*)" to be displayed$/) do |which|
|
|
23
|
+
displayed_hash_after_wait?(:name => "#{which}").should be_true
|
|
24
|
+
end
|
|
25
|
+
When(/^I see that the "([^"]*)" is never displayed$/) do |which|
|
|
26
|
+
displayed_hash_after_wait?(:name => "#{which}").should be_false
|
|
27
|
+
end
|
|
28
|
+
When(/^I see that the "([^"]*)" is never enabled$/) do |which|
|
|
29
|
+
enabled_hash_after_wait?(:name => "#{which}").should be_false
|
|
15
30
|
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
Then(/^I see the table defined "([^"]*)" is( not)? sorted$/) do |which, unsorted|
|
|
2
|
+
on(TablePage).send("view_#{which}_view").sorted?.should == unsorted.nil?
|
|
3
|
+
end
|
|
4
|
+
Then(/^I can see all the children for the view defined "([^"]*)"$/) do |which|
|
|
5
|
+
children = on(TablePage).send("view_#{which}_view").children
|
|
6
|
+
children[0].attribute('name').should eq '1'
|
|
7
|
+
children[1].attribute('name').should eq '2'
|
|
8
|
+
children[2].attribute('name').should eq '3'
|
|
9
|
+
children[3].attribute('name').should eq 'a'
|
|
10
|
+
children[4].attribute('name').should eq 'b'
|
|
11
|
+
children[5].attribute('name').should eq 'c'
|
|
12
|
+
children[6].attribute('name').should eq 'd'
|
|
13
|
+
children[7].attribute('name').should eq 'e'
|
|
14
|
+
end
|
data/features/support/routes.rb
CHANGED
|
@@ -11,6 +11,8 @@ class HomePage
|
|
|
11
11
|
button(:view_exists, :name => 'existsButton')
|
|
12
12
|
button(:view_displayed, :name => 'displayedPageButton')
|
|
13
13
|
button(:view_enabled, :name => 'enabledPageButton')
|
|
14
|
+
button(:view_scroll, :name => 'swipePageButton')
|
|
15
|
+
button(:view_tables, :name => 'tablePageButton')
|
|
14
16
|
button(:alert_Ok, :name => 'Ok')
|
|
15
17
|
button(:alert_Cancel, :name => 'Cancel')
|
|
16
18
|
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
require 'rufus'
|
|
2
|
+
|
|
3
|
+
class TablePage
|
|
4
|
+
include Rufus
|
|
5
|
+
|
|
6
|
+
table(:view_ascending, :name => 'ascending')
|
|
7
|
+
table(:view_descending, :name => 'descending')
|
|
8
|
+
table(:view_unsorted, :name => 'notSorted')
|
|
9
|
+
|
|
10
|
+
def active?
|
|
11
|
+
exists_after_wait? view_ascending_view
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
@table
|
|
2
|
+
Feature: dealing with tables
|
|
3
|
+
|
|
4
|
+
Background:
|
|
5
|
+
Given I have navigated to the "TablePage" using the "to_tables" route
|
|
6
|
+
|
|
7
|
+
Scenario: Checking the sort
|
|
8
|
+
Then I see the table defined "ascending" is sorted
|
|
9
|
+
And I see the table defined "descending" is sorted
|
|
10
|
+
And I see the table defined "unsorted" is not sorted
|
|
11
|
+
|
|
12
|
+
Scenario: Getting the child elements
|
|
13
|
+
Then I can see all the children for the view defined "ascending"
|
data/features/view.feature
CHANGED
|
@@ -31,7 +31,7 @@ Feature: Interacting with views
|
|
|
31
31
|
Given I have navigated to the "EnabledPage" using the "to_enabled" route
|
|
32
32
|
Then I am on the "EnabledPage"
|
|
33
33
|
And the view marked "not_enabled" is not enabled
|
|
34
|
-
|
|
34
|
+
|
|
35
35
|
Scenario: Calling views in a block
|
|
36
36
|
Given I am on the "HomePage"
|
|
37
37
|
Then in a block can see the existence of views "rufus", "exists" and "displayed"
|
data/lib/rufus.rb
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
require 'rufus/navigation'
|
|
2
2
|
require 'rufus/accessors/accessors'
|
|
3
3
|
require 'rufus/accessors/view'
|
|
4
|
+
require 'rufus/accessors/table'
|
|
4
5
|
|
|
5
6
|
module Rufus
|
|
6
7
|
|
|
@@ -38,6 +39,21 @@ module Rufus
|
|
|
38
39
|
true
|
|
39
40
|
end
|
|
40
41
|
|
|
42
|
+
def enabled_hash_after_wait?(locator, timeout = 5)
|
|
43
|
+
element = find locator
|
|
44
|
+
enabled_after_wait? element, timeout
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def exists_hash_after_wait?(locator, timeout = 5)
|
|
48
|
+
view = Rufus::Accessors::View.new locator
|
|
49
|
+
exists_after_wait? view, timeout
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def displayed_hash_after_wait?(locator, timeout = 5)
|
|
53
|
+
view = Rufus::Accessors::View.new locator
|
|
54
|
+
displayed_after_wait? view, timeout
|
|
55
|
+
end
|
|
56
|
+
|
|
41
57
|
def find(locator)
|
|
42
58
|
selenium.find(locator)
|
|
43
59
|
end
|
|
@@ -54,6 +70,11 @@ module Rufus
|
|
|
54
70
|
selenium.elements_by_tag(type)
|
|
55
71
|
end
|
|
56
72
|
|
|
73
|
+
def scroll_to(locator)
|
|
74
|
+
selenium.scroll_to(locator)
|
|
75
|
+
end
|
|
57
76
|
end
|
|
58
77
|
|
|
59
78
|
|
|
79
|
+
|
|
80
|
+
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
require 'rufus/accessors/view'
|
|
2
|
+
|
|
3
|
+
module Rufus
|
|
4
|
+
module Accessors
|
|
5
|
+
class Table < View
|
|
6
|
+
|
|
7
|
+
def children
|
|
8
|
+
selenium.cells locator
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def sorted?
|
|
12
|
+
elements_sorted children
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def sorted_ascending?
|
|
16
|
+
ascending? children
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def sorted_descending?
|
|
20
|
+
descending? children
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
private
|
|
24
|
+
|
|
25
|
+
def elements_sorted(elements)
|
|
26
|
+
return true if elements.count == 1
|
|
27
|
+
descending? elements or ascending? elements
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def descending?(elements)
|
|
31
|
+
labels = elements.map{|element| element.attribute 'name'}
|
|
32
|
+
elements = elements.map{|element| element.attribute 'name'}
|
|
33
|
+
elements == labels.sort.reverse
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def ascending?(elements)
|
|
37
|
+
labels = elements.map{|element| element.attribute 'name'}
|
|
38
|
+
elements = elements.map{|element| element.attribute 'name'}
|
|
39
|
+
elements == labels.sort
|
|
40
|
+
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def element_names(elements)
|
|
44
|
+
elements.map{|element| element.attribute 'name'}
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
data/lib/rufus/driver.rb
CHANGED
|
@@ -41,6 +41,12 @@ module Rufus
|
|
|
41
41
|
end
|
|
42
42
|
end
|
|
43
43
|
|
|
44
|
+
def cells(locator)
|
|
45
|
+
element = find(locator)
|
|
46
|
+
raise 'Expected view to be of type UIATableView' unless element.tag_name.eql? 'UIATableView'
|
|
47
|
+
element.find_elements(:tag_name, 'UIATableCell')
|
|
48
|
+
end
|
|
49
|
+
|
|
44
50
|
def click(locator)
|
|
45
51
|
find(locator).click
|
|
46
52
|
end
|
|
@@ -161,6 +167,11 @@ module Rufus
|
|
|
161
167
|
driver.find_elements(:tag_name, name)
|
|
162
168
|
end
|
|
163
169
|
|
|
170
|
+
def scroll_to(locator)
|
|
171
|
+
id = find(locator).ref
|
|
172
|
+
driver.execute_script 'mobile: scrollTo', {'element' => id}
|
|
173
|
+
end
|
|
174
|
+
|
|
164
175
|
private
|
|
165
176
|
|
|
166
177
|
def url(config)
|
data/rakefile
CHANGED
|
@@ -26,7 +26,7 @@ end
|
|
|
26
26
|
|
|
27
27
|
desc "Run the features"
|
|
28
28
|
task :features do
|
|
29
|
-
`bundle exec cucumber
|
|
29
|
+
`bundle exec cucumber 1>&2`
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
desc "Starting the appium server"
|
|
@@ -88,3 +88,6 @@ task :reset_sim do
|
|
|
88
88
|
APPLESCRIPT}
|
|
89
89
|
end
|
|
90
90
|
|
|
91
|
+
desc "Deploy new build to simulator"
|
|
92
|
+
task :deploy => [:reset_sim, :build_sim, :install_sim]
|
|
93
|
+
|
data/rufus.gemspec
CHANGED
|
@@ -350,5 +350,57 @@ describe Rufus::Driver do
|
|
|
350
350
|
end
|
|
351
351
|
end
|
|
352
352
|
end
|
|
353
|
+
context 'scrolling' do
|
|
354
|
+
|
|
355
|
+
let(:yaml){double('YAML loader')}
|
|
356
|
+
let(:mock_driver){'a mock app driver'}
|
|
357
|
+
let(:url){'http://127.0.0.1:4723/wd/hub'}
|
|
358
|
+
let(:mock_element){'mock selenium element'}
|
|
359
|
+
let(:swipe_options){{'element' => 1}}
|
|
360
|
+
before(:each) do
|
|
361
|
+
File.stub(:exists?).and_return(true)
|
|
362
|
+
@config = {"browser_name" =>"iOS", "platform"=>"Mac", "version"=>"6.1", "app"=>"/Users/app/path/rufus.app", "use_physical" => false}
|
|
363
|
+
YAML.should_receive(:load).and_return(@config)
|
|
364
|
+
@driver = Rufus::Driver.new
|
|
365
|
+
end
|
|
366
|
+
|
|
367
|
+
it 'can scroll to a view' do
|
|
368
|
+
Rufus::Drivers::IOS_Simulator.should_receive(:for).with(@config, url).and_return(mock_driver)
|
|
369
|
+
mock_driver.should_receive(:find_element).with(:name, 'elementName').and_return(mock_element)
|
|
370
|
+
mock_element.should_receive(:ref).and_return(1)
|
|
371
|
+
mock_driver.should_receive(:execute_script).with('mobile: scrollTo', swipe_options)
|
|
372
|
+
@driver.scroll_to(:name => 'elementName')
|
|
373
|
+
end
|
|
374
|
+
end
|
|
375
|
+
|
|
376
|
+
context 'finding child elements of table view' do
|
|
377
|
+
|
|
378
|
+
let(:yaml){double('YAML loader')}
|
|
379
|
+
let(:mock_driver){'a mock app driver'}
|
|
380
|
+
let(:url){'http://127.0.0.1:4723/wd/hub'}
|
|
381
|
+
let(:mock_element){'mock selenium element'}
|
|
382
|
+
let(:children){'mock tableview children'}
|
|
383
|
+
|
|
384
|
+
before(:each) do
|
|
385
|
+
File.stub(:exists?).and_return(true)
|
|
386
|
+
@config = {"browser_name" =>"iOS", "platform"=>"Mac", "version"=>"6.1", "app"=>"/Users/app/path/rufus.app", "use_physical" => false}
|
|
387
|
+
YAML.should_receive(:load).and_return(@config)
|
|
388
|
+
@driver = Rufus::Driver.new
|
|
389
|
+
Rufus::Drivers::IOS_Simulator.should_receive(:for).with(@config, url).and_return(mock_driver)
|
|
390
|
+
mock_driver.should_receive(:find_element).with(:name, 'elementName').and_return(mock_element)
|
|
391
|
+
end
|
|
392
|
+
|
|
393
|
+
it 'returns no elements if element is not table view' do
|
|
394
|
+
mock_element.should_receive(:tag_name).and_return('UIStaticText')
|
|
395
|
+
expect{@driver.cells(:name => 'elementName')}.to raise_error(RuntimeError, 'Expected view to be of type UIATableView')
|
|
396
|
+
end
|
|
397
|
+
|
|
398
|
+
it 'can find a list of child elements' do
|
|
399
|
+
mock_element.should_receive(:tag_name).and_return('UIATableView')
|
|
400
|
+
mock_element.should_receive(:find_elements).with(:tag_name, 'UIATableCell').and_return(children)
|
|
401
|
+
@driver.cells(:name => 'elementName').should == children
|
|
402
|
+
end
|
|
403
|
+
end
|
|
353
404
|
end
|
|
354
405
|
end
|
|
406
|
+
|
data/spec/rufus_spec.rb
CHANGED
|
@@ -112,4 +112,12 @@ describe Rufus do
|
|
|
112
112
|
end
|
|
113
113
|
|
|
114
114
|
end
|
|
115
|
+
|
|
116
|
+
context 'scrolling' do
|
|
117
|
+
let(:selenium){'mock selenium driver'}
|
|
118
|
+
it 'can swipe to the right' do
|
|
119
|
+
selenium.should_receive(:scroll_to).with(:name => 'elementName')
|
|
120
|
+
scroll_to(:name => 'elementName')
|
|
121
|
+
end
|
|
122
|
+
end
|
|
115
123
|
end
|
data/spec/table_spec.rb
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
require 'rufus/accessors/table'
|
|
2
|
+
require 'spec_helper'
|
|
3
|
+
|
|
4
|
+
describe Rufus::Accessors::Table do
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
context 'getting child elements' do
|
|
8
|
+
|
|
9
|
+
let(:table) {Rufus::Accessors::Table.new(:name => 'testTable')}
|
|
10
|
+
let(:selenium){double('Selenium::WebDriver')}
|
|
11
|
+
let(:mock_child_elements){double('list of child elements')}
|
|
12
|
+
|
|
13
|
+
before(:each) do
|
|
14
|
+
table.should_receive(:selenium).and_return(selenium)
|
|
15
|
+
selenium.should_receive(:cells).with(:name => 'testTable').and_return(mock_child_elements)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it 'can get all the child elements of the table' do
|
|
19
|
+
table.children.should eq mock_child_elements
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
context 'determining sort' do
|
|
23
|
+
|
|
24
|
+
let(:first_element){'first child element'}
|
|
25
|
+
let(:second_element){'second child element'}
|
|
26
|
+
let(:third_element){'third child element'}
|
|
27
|
+
|
|
28
|
+
it 'is considered sorted for one child' do
|
|
29
|
+
mock_child_elements.should_receive(:count).and_return 1
|
|
30
|
+
table.sorted?.should be_true
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rufus
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: '0.
|
|
4
|
+
version: '0.6'
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jeremy Stewart
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2013-10-
|
|
11
|
+
date: 2013-10-22 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: page_navigation
|
|
@@ -304,6 +304,15 @@ files:
|
|
|
304
304
|
- RufusApp/RufusApp/RufusPageViewController.h
|
|
305
305
|
- RufusApp/RufusApp/RufusPageViewController.m
|
|
306
306
|
- RufusApp/RufusApp/RufusPageViewController.xib
|
|
307
|
+
- RufusApp/RufusApp/ScrollChildViewController.h
|
|
308
|
+
- RufusApp/RufusApp/ScrollChildViewController.m
|
|
309
|
+
- RufusApp/RufusApp/ScrollChildViewController.xib
|
|
310
|
+
- RufusApp/RufusApp/ScrollPageViewController.h
|
|
311
|
+
- RufusApp/RufusApp/ScrollPageViewController.m
|
|
312
|
+
- RufusApp/RufusApp/ScrollPageViewController.xib
|
|
313
|
+
- RufusApp/RufusApp/TablePageViewController.h
|
|
314
|
+
- RufusApp/RufusApp/TablePageViewController.m
|
|
315
|
+
- RufusApp/RufusApp/TablePageViewController.xib
|
|
307
316
|
- RufusApp/RufusApp/en.lproj/InfoPlist.strings
|
|
308
317
|
- RufusApp/RufusApp/en.lproj/RUViewController.xib
|
|
309
318
|
- RufusApp/RufusApp/main.m
|
|
@@ -315,9 +324,12 @@ files:
|
|
|
315
324
|
- features/alert.feature
|
|
316
325
|
- features/driver.feature
|
|
317
326
|
- features/rufus.feature
|
|
327
|
+
- features/scroll.feature
|
|
318
328
|
- features/step_definitions/alert_steps.rb.rb
|
|
319
329
|
- features/step_definitions/driver_steps.rb
|
|
320
330
|
- features/step_definitions/rufus_steps.rb
|
|
331
|
+
- features/step_definitions/scroll_steps.rb
|
|
332
|
+
- features/step_definitions/table_steps.rb
|
|
321
333
|
- features/step_definitions/view_steps.rb
|
|
322
334
|
- features/support/core_ext/string.rb
|
|
323
335
|
- features/support/env.rb
|
|
@@ -328,9 +340,13 @@ files:
|
|
|
328
340
|
- features/support/screens/exists_page.rb
|
|
329
341
|
- features/support/screens/home_page.rb
|
|
330
342
|
- features/support/screens/rufus_page.rb
|
|
343
|
+
- features/support/screens/scroll_page.rb
|
|
344
|
+
- features/support/screens/table_page.rb
|
|
345
|
+
- features/table.feature
|
|
331
346
|
- features/view.feature
|
|
332
347
|
- lib/rufus.rb
|
|
333
348
|
- lib/rufus/accessors/accessors.rb
|
|
349
|
+
- lib/rufus/accessors/table.rb
|
|
334
350
|
- lib/rufus/accessors/view.rb
|
|
335
351
|
- lib/rufus/driver.rb
|
|
336
352
|
- lib/rufus/drivers/iOS_device.rb
|
|
@@ -345,6 +361,7 @@ files:
|
|
|
345
361
|
- spec/navigation_spec.rb
|
|
346
362
|
- spec/rufus_spec.rb
|
|
347
363
|
- spec/spec_helper.rb
|
|
364
|
+
- spec/table_spec.rb
|
|
348
365
|
- spec/view_spec.rb
|
|
349
366
|
homepage: https://github.com/jlstewart379/rufus
|
|
350
367
|
licenses:
|