Commit 6a5e3ea9f6e2cb82c727a930f0a7cd2f259b1ea1

Authored by nvtu11790@gmail.com
1 parent b0579422a5

Add function to change endDate in ranking screen

Showing 3 changed files with 11 additions and 4 deletions Inline Diff

LifeLog/LifeLog/RankingViewController.h
1 // 1 //
2 // RankingViewController.h 2 // RankingViewController.h
3 // LifeLog 3 // LifeLog
4 // 4 //
5 // Created by Nguyen Van Phong on 7/25/17. 5 // Created by Nguyen Van Phong on 7/25/17.
6 // Copyright © 2017 PhongNV. All rights reserved. 6 // Copyright © 2017 PhongNV. All rights reserved.
7 // 7 //
8 8
9 #import <UIKit/UIKit.h> 9 #import <UIKit/UIKit.h>
10 10
11 #import "BaseTableViewController.h" 11 #import "BaseTableViewController.h"
12 #import "CollectionView.h" 12 #import "CollectionView.h"
13 13
14 @interface RankingViewController : BaseTableViewController { 14 @interface RankingViewController : BaseTableViewController {
15 NSDate * _startDate; 15 NSDate * _startDate;
16 NSDate * _endDate; 16 NSDate * _endDate;
17 } 17 }
18 18
19 @property (weak, nonatomic) IBOutlet CollectionView *viewCollectionTime; 19 @property (weak, nonatomic) IBOutlet CollectionView *viewCollectionTime;
20 @property (weak, nonatomic) IBOutlet CollectionView *viewCollectionMode; 20 @property (weak, nonatomic) IBOutlet CollectionView *viewCollectionMode;
21 @property (weak, nonatomic) IBOutlet CollectionView *viewCollectionType; 21 @property (weak, nonatomic) IBOutlet CollectionView *viewCollectionType;
22 @property (weak, nonatomic) IBOutlet UILabel *lblDateTime; 22 @property (weak, nonatomic) IBOutlet UILabel *lblDateTime;
23 23
24 - (IBAction)clickButton:(UIButton *)sender; 24 - (IBAction)clickBackward:(UIButton *)sender;
25 - (IBAction)clickForward:(UIButton *)sender;
25 @end 26 @end
26 27
LifeLog/LifeLog/RankingViewController.m
1 // 1 //
2 // RankingViewController.m 2 // RankingViewController.m
3 // LifeLog 3 // LifeLog
4 // 4 //
5 // Created by Nguyen Van Phong on 7/25/17. 5 // Created by Nguyen Van Phong on 7/25/17.
6 // Copyright © 2017 PhongNV. All rights reserved. 6 // Copyright © 2017 PhongNV. All rights reserved.
7 // 7 //
8 8
9 #import "RankingViewController.h" 9 #import "RankingViewController.h"
10 #import "RankingTableViewCell.h" 10 #import "RankingTableViewCell.h"
11 11
12 #import "ServerAPI.h" 12 #import "ServerAPI.h"
13 #import "Utilities.h" 13 #import "Utilities.h"
14 14
15 @interface RankingViewController () 15 @interface RankingViewController ()
16 16
17 @end 17 @end
18 18
19 @implementation RankingViewController 19 @implementation RankingViewController
20 20
21 - (void)viewDidLoad { 21 - (void)viewDidLoad {
22 [super viewDidLoad]; 22 [super viewDidLoad];
23 // Do any additional setup after loading the view from its nib. 23 // Do any additional setup after loading the view from its nib.
24 self.title = NSLocalizedString(@"lifelog.rank.title", nil); 24 self.title = NSLocalizedString(@"lifelog.rank.title", nil);
25 25
26 [self setupView]; 26 [self setupView];
27 27
28 _startDate = [NSDate date]; 28 _startDate = [NSDate date];
29 _endDate = _startDate; 29 _endDate = _startDate;
30 self.lblDateTime.text = [Utilities stringFromDate:_endDate withFormat:@"YYYY年MM月dd日 EEEE" locale:@"ja_JP"]; 30 self.lblDateTime.text = [Utilities stringFromDate:_endDate withFormat:@"YYYY年MM月dd日 EEEE" locale:@"ja_JP"];
31 31
32 //register nib for table view 32 //register nib for table view
33 [self.tableBase registerNib:[UINib nibWithNibName:@"RankingTableViewCell" bundle:nil] forCellReuseIdentifier:@"RankCell"]; 33 [self.tableBase registerNib:[UINib nibWithNibName:@"RankingTableViewCell" bundle:nil] forCellReuseIdentifier:@"RankCell"];
34 34
35 [self callRequestToUpdateData]; 35 [self callRequestToUpdateData];
36 } 36 }
37 37
38 - (void)didReceiveMemoryWarning { 38 - (void)didReceiveMemoryWarning {
39 [super didReceiveMemoryWarning]; 39 [super didReceiveMemoryWarning];
40 // Dispose of any resources that can be recreated. 40 // Dispose of any resources that can be recreated.
41 } 41 }
42 42
43 #pragma mark Setup and Update View 43 #pragma mark Setup and Update View
44 44
45 - (void)setupView { 45 - (void)setupView {
46 NSArray *timeTitle = [NSArray arrayWithObjects:NSLocalizedString(@"lifelog.rank.time.1", nil), NSLocalizedString(@"lifelog.rank.time.2", nil), NSLocalizedString(@"lifelog.rank.time.3", nil), NSLocalizedString(@"lifelog.rank.time.4", nil), nil]; 46 NSArray *timeTitle = [NSArray arrayWithObjects:NSLocalizedString(@"lifelog.rank.time.1", nil), NSLocalizedString(@"lifelog.rank.time.2", nil), NSLocalizedString(@"lifelog.rank.time.3", nil), NSLocalizedString(@"lifelog.rank.time.4", nil), nil];
47 [self.viewCollectionTime setButtonNumber:timeTitle.count]; 47 [self.viewCollectionTime setButtonNumber:timeTitle.count];
48 [self.viewCollectionTime setSpacing:1]; 48 [self.viewCollectionTime setSpacing:1];
49 [self.viewCollectionTime setArrayTitle:timeTitle]; 49 [self.viewCollectionTime setArrayTitle:timeTitle];
50 self.viewCollectionTime.changeCurrentIndex = ^(int index){ 50 self.viewCollectionTime.changeCurrentIndex = ^(int index){
51 [self changeDate]; 51 [self changeDate];
52 }; 52 };
53 53
54 NSArray *modeTitle = [NSArray arrayWithObjects:NSLocalizedString(@"lifelog.rank.mode.1", nil), NSLocalizedString(@"lifelog.rank.mode.2", nil), NSLocalizedString(@"lifelog.rank.mode.3", nil), NSLocalizedString(@"lifelog.rank.mode.4", nil), nil]; 54 NSArray *modeTitle = [NSArray arrayWithObjects:NSLocalizedString(@"lifelog.rank.mode.1", nil), NSLocalizedString(@"lifelog.rank.mode.2", nil), NSLocalizedString(@"lifelog.rank.mode.3", nil), NSLocalizedString(@"lifelog.rank.mode.4", nil), nil];
55 [self.viewCollectionMode setButtonNumber:modeTitle.count]; 55 [self.viewCollectionMode setButtonNumber:modeTitle.count];
56 [self.viewCollectionMode setSpacing:1]; 56 [self.viewCollectionMode setSpacing:1];
57 [self.viewCollectionMode setArrayTitle:modeTitle]; 57 [self.viewCollectionMode setArrayTitle:modeTitle];
58 self.viewCollectionMode.changeCurrentIndex = ^(int index){ 58 self.viewCollectionMode.changeCurrentIndex = ^(int index){
59 [self callRequestToUpdateData]; 59 [self callRequestToUpdateData];
60 }; 60 };
61 61
62 NSArray *typeTitle = [NSArray arrayWithObjects:NSLocalizedString(@"lifelog.rank.type.1", nil), NSLocalizedString(@"lifelog.rank.type.2", nil), NSLocalizedString(@"lifelog.rank.type.3", nil), NSLocalizedString(@"lifelog.rank.type.4", nil), nil]; 62 NSArray *typeTitle = [NSArray arrayWithObjects:NSLocalizedString(@"lifelog.rank.type.1", nil), NSLocalizedString(@"lifelog.rank.type.2", nil), NSLocalizedString(@"lifelog.rank.type.3", nil), NSLocalizedString(@"lifelog.rank.type.4", nil), nil];
63 [self.viewCollectionType setButtonNumber:typeTitle.count]; 63 [self.viewCollectionType setButtonNumber:typeTitle.count];
64 [self.viewCollectionType setSpacing:1]; 64 [self.viewCollectionType setSpacing:1];
65 [self.viewCollectionType setArrayTitle:typeTitle]; 65 [self.viewCollectionType setArrayTitle:typeTitle];
66 self.viewCollectionMode.changeCurrentIndex = ^(int index){ 66 self.viewCollectionMode.changeCurrentIndex = ^(int index){
67 [self callRequestToUpdateData]; 67 [self callRequestToUpdateData];
68 }; 68 };
69 } 69 }
70 70
71 71
72 #pragma mark IBAction function 72 #pragma mark IBAction function
73 - (IBAction)clickBackward:(UIButton *)sender {
74 _endDate = [_endDate dateByAddingTimeInterval:-86400];
75 [self changeDate];
76 }
73 77
74 - (IBAction)clickButton:(UIButton *)sender { 78 - (IBAction)clickForward:(UIButton *)sender {
79 _endDate = [_endDate dateByAddingTimeInterval:86400];
80 [self changeDate];
75 } 81 }
76 82
77 #pragma mark UITableView Delegate 83 #pragma mark UITableView Delegate
78 84
79 - (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 85 - (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
80 RankingTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"RankCell"]; 86 RankingTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"RankCell"];
81 [cell setRankingData:[_curDataList objectAtIndex:indexPath.row]]; 87 [cell setRankingData:[_curDataList objectAtIndex:indexPath.row]];
82 return cell; 88 return cell;
83 } 89 }
84 90
85 #pragma mark Private function 91 #pragma mark Private function
86 - (void)callRequestToUpdateData { 92 - (void)callRequestToUpdateData {
87 [super callRequestToUpdateData]; 93 [super callRequestToUpdateData];
88 94
89 NSString * token = [[NSUserDefaults standardUserDefaults] stringForKey:kToken]; 95 NSString * token = [[NSUserDefaults standardUserDefaults] stringForKey:kToken];
90 MBProgressHUD *hudView = nil; 96 MBProgressHUD *hudView = nil;
91 int mode = self.viewCollectionMode.getCurrentIndex + 1; 97 int mode = self.viewCollectionMode.getCurrentIndex + 1;
92 //dont have all 98 //dont have all
93 mode = fmin(mode, 3); 99 mode = fmin(mode, 3);
94 100
95 if(_curPage == 1 && !self.refreshControl.isRefreshing) { 101 if(_curPage == 1 && !self.refreshControl.isRefreshing) {
96 hudView = [MBProgressHUD showHUDAddedTo:self.view animated:true]; 102 hudView = [MBProgressHUD showHUDAddedTo:self.view animated:true];
97 } 103 }
98 [[ServerAPI server] requestRankingList:token startDate:_startDate endDate:_endDate mode:mode page:_curPage CompletionHandler:^(NSArray *array, NSError *error){ 104 [[ServerAPI server] requestRankingList:token startDate:_startDate endDate:_endDate mode:mode page:_curPage CompletionHandler:^(NSArray *array, NSError *error){
99 dispatch_async(dispatch_get_main_queue(), ^{ 105 dispatch_async(dispatch_get_main_queue(), ^{
100 if(hudView != nil) { 106 if(hudView != nil) {
101 [hudView hideAnimated:true]; 107 [hudView hideAnimated:true];
102 } 108 }
103 }); 109 });
104 RankingViewController __weak *weakSelf = self; 110 RankingViewController __weak *weakSelf = self;
105 [weakSelf updateTableData:array error:error]; 111 [weakSelf updateTableData:array error:error];
106 }]; 112 }];
107 } 113 }
108 114
109 - (void) changeDate { 115 - (void) changeDate {
110 switch (self.viewCollectionTime.getCurrentIndex) { 116 switch (self.viewCollectionTime.getCurrentIndex) {
111 case 1: 117 case 1:
112 _startDate = [_endDate dateByAddingTimeInterval:-86400 * 7]; 118 _startDate = [_endDate dateByAddingTimeInterval:-86400 * 7];
113 break; 119 break;
114 case 2: 120 case 2:
115 _startDate = [_endDate dateByAddingTimeInterval:-86400 * 30]; 121 _startDate = [_endDate dateByAddingTimeInterval:-86400 * 30];
116 break; 122 break;
117 case 3: 123 case 3:
118 _startDate = [_endDate dateByAddingTimeInterval:-86400 * 365]; 124 _startDate = [_endDate dateByAddingTimeInterval:-86400 * 365];
119 break; 125 break;
120 default: 126 default:
121 _startDate = _endDate; 127 _startDate = _endDate;
122 break; 128 break;
123 } 129 }
124 if(_startDate == _endDate) { 130 if(_startDate == _endDate) {
125 self.lblDateTime.text = [Utilities stringFromDate:_endDate withFormat:@"YYYY年MM月dd日 EEEE" locale:@"ja_JP"]; 131 self.lblDateTime.text = [Utilities stringFromDate:_endDate withFormat:@"YYYY年MM月dd日 EEEE" locale:@"ja_JP"];
126 } 132 }
127 else { 133 else {
128 NSString * startDateString = [Utilities stringFromDate:_startDate withFormat:@"YYYY年MM月dd日" locale:@"ja_JP"]; 134 NSString * startDateString = [Utilities stringFromDate:_startDate withFormat:@"YYYY年MM月dd日" locale:@"ja_JP"];
129 NSString * endDateString = [Utilities stringFromDate:_endDate withFormat:@"YYYY年MM月dd日" locale:@"ja_JP"]; 135 NSString * endDateString = [Utilities stringFromDate:_endDate withFormat:@"YYYY年MM月dd日" locale:@"ja_JP"];
130 self.lblDateTime.text = [NSString stringWithFormat:@"%@-%@", startDateString, endDateString]; 136 self.lblDateTime.text = [NSString stringWithFormat:@"%@-%@", startDateString, endDateString];
131 } 137 }
132 [self callRequestToUpdateData]; 138 [self callRequestToUpdateData];
133 } 139 }
134 @end 140 @end
135 141
LifeLog/LifeLog/RankingViewController.xib
1 <?xml version="1.0" encoding="UTF-8"?> 1 <?xml version="1.0" encoding="UTF-8"?>
2 <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="12118" systemVersion="16D32" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES"> 2 <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="12118" systemVersion="16D32" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
3 <device id="retina4_7" orientation="portrait"> 3 <device id="retina4_7" orientation="portrait">
4 <adaptation id="fullscreen"/> 4 <adaptation id="fullscreen"/>
5 </device> 5 </device>
6 <dependencies> 6 <dependencies>
7 <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12086"/> 7 <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12086"/>
8 <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> 8 <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
9 </dependencies> 9 </dependencies>
10 <objects> 10 <objects>
11 <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="RankingViewController"> 11 <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="RankingViewController">
12 <connections> 12 <connections>
13 <outlet property="lblDateTime" destination="5Ro-k6-fvT" id="5uO-ff-Pmc"/> 13 <outlet property="lblDateTime" destination="5Ro-k6-fvT" id="5uO-ff-Pmc"/>
14 <outlet property="tableBase" destination="R3A-K9-MFe" id="Tf9-Rg-PEW"/> 14 <outlet property="tableBase" destination="R3A-K9-MFe" id="Tf9-Rg-PEW"/>
15 <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/> 15 <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
16 <outlet property="viewCollectionMode" destination="B33-xX-Jro" id="HP4-Xb-LJm"/> 16 <outlet property="viewCollectionMode" destination="B33-xX-Jro" id="HP4-Xb-LJm"/>
17 <outlet property="viewCollectionTime" destination="syA-uK-pbr" id="WdA-Cq-Flj"/> 17 <outlet property="viewCollectionTime" destination="syA-uK-pbr" id="WdA-Cq-Flj"/>
18 <outlet property="viewCollectionType" destination="oUo-Eo-tz5" id="bjw-El-34G"/> 18 <outlet property="viewCollectionType" destination="oUo-Eo-tz5" id="bjw-El-34G"/>
19 </connections> 19 </connections>
20 </placeholder> 20 </placeholder>
21 <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> 21 <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
22 <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT"> 22 <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
23 <rect key="frame" x="0.0" y="0.0" width="375" height="667"/> 23 <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
24 <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> 24 <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
25 <subviews> 25 <subviews>
26 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="GBx-lY-9YI" userLabel="ViewHeader"> 26 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="GBx-lY-9YI" userLabel="ViewHeader">
27 <rect key="frame" x="0.0" y="0.0" width="375" height="46"/> 27 <rect key="frame" x="0.0" y="0.0" width="375" height="46"/>
28 <subviews> 28 <subviews>
29 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ランキング" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="p97-40-8m9" customClass="AutoTransLabel"> 29 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ランキング" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="p97-40-8m9" customClass="AutoTransLabel">
30 <rect key="frame" x="0.0" y="0.0" width="375" height="46"/> 30 <rect key="frame" x="0.0" y="0.0" width="375" height="46"/>
31 <fontDescription key="fontDescription" type="system" pointSize="17"/> 31 <fontDescription key="fontDescription" type="system" pointSize="17"/>
32 <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/> 32 <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
33 <nil key="highlightedColor"/> 33 <nil key="highlightedColor"/>
34 <userDefinedRuntimeAttributes> 34 <userDefinedRuntimeAttributes>
35 <userDefinedRuntimeAttribute type="string" keyPath="localizeKey" value="lifelog.rank.title"/> 35 <userDefinedRuntimeAttribute type="string" keyPath="localizeKey" value="lifelog.rank.title"/>
36 </userDefinedRuntimeAttributes> 36 </userDefinedRuntimeAttributes>
37 </label> 37 </label>
38 <button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="qPe-ff-jRp"> 38 <button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="qPe-ff-jRp">
39 <rect key="frame" x="0.0" y="5" width="70" height="36"/> 39 <rect key="frame" x="0.0" y="5" width="70" height="36"/>
40 <constraints> 40 <constraints>
41 <constraint firstAttribute="width" constant="70" id="bEy-jt-69Q"/> 41 <constraint firstAttribute="width" constant="70" id="bEy-jt-69Q"/>
42 </constraints> 42 </constraints>
43 <state key="normal" image="today_back_button"/> 43 <state key="normal" image="today_back_button"/>
44 </button> 44 </button>
45 <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="WGc-2i-Swk"> 45 <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="WGc-2i-Swk">
46 <rect key="frame" x="330" y="0.0" width="45" height="46"/> 46 <rect key="frame" x="330" y="0.0" width="45" height="46"/>
47 <constraints> 47 <constraints>
48 <constraint firstAttribute="width" constant="45" id="nJ2-jH-Z45"/> 48 <constraint firstAttribute="width" constant="45" id="nJ2-jH-Z45"/>
49 </constraints> 49 </constraints>
50 <state key="normal" image="icon_menu"/> 50 <state key="normal" image="icon_menu"/>
51 </button> 51 </button>
52 </subviews> 52 </subviews>
53 <color key="backgroundColor" red="0.098039215690000001" green="0.098039215690000001" blue="0.098039215690000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> 53 <color key="backgroundColor" red="0.098039215690000001" green="0.098039215690000001" blue="0.098039215690000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
54 <constraints> 54 <constraints>
55 <constraint firstAttribute="bottom" secondItem="WGc-2i-Swk" secondAttribute="bottom" id="0hd-fk-kJG"/> 55 <constraint firstAttribute="bottom" secondItem="WGc-2i-Swk" secondAttribute="bottom" id="0hd-fk-kJG"/>
56 <constraint firstAttribute="bottom" secondItem="p97-40-8m9" secondAttribute="bottom" id="78G-b2-wAu"/> 56 <constraint firstAttribute="bottom" secondItem="p97-40-8m9" secondAttribute="bottom" id="78G-b2-wAu"/>
57 <constraint firstItem="qPe-ff-jRp" firstAttribute="leading" secondItem="GBx-lY-9YI" secondAttribute="leading" id="9ND-Te-qX9"/> 57 <constraint firstItem="qPe-ff-jRp" firstAttribute="leading" secondItem="GBx-lY-9YI" secondAttribute="leading" id="9ND-Te-qX9"/>
58 <constraint firstItem="qPe-ff-jRp" firstAttribute="top" secondItem="GBx-lY-9YI" secondAttribute="top" constant="5" id="9ZX-A3-Bnp"/> 58 <constraint firstItem="qPe-ff-jRp" firstAttribute="top" secondItem="GBx-lY-9YI" secondAttribute="top" constant="5" id="9ZX-A3-Bnp"/>
59 <constraint firstItem="p97-40-8m9" firstAttribute="top" secondItem="GBx-lY-9YI" secondAttribute="top" id="CVN-ke-5KK"/> 59 <constraint firstItem="p97-40-8m9" firstAttribute="top" secondItem="GBx-lY-9YI" secondAttribute="top" id="CVN-ke-5KK"/>
60 <constraint firstAttribute="height" constant="46" id="SDI-ij-KbH"/> 60 <constraint firstAttribute="height" constant="46" id="SDI-ij-KbH"/>
61 <constraint firstItem="p97-40-8m9" firstAttribute="leading" secondItem="GBx-lY-9YI" secondAttribute="leading" id="U19-fM-q7G"/> 61 <constraint firstItem="p97-40-8m9" firstAttribute="leading" secondItem="GBx-lY-9YI" secondAttribute="leading" id="U19-fM-q7G"/>
62 <constraint firstAttribute="bottom" secondItem="qPe-ff-jRp" secondAttribute="bottom" constant="5" id="jU7-xM-YKX"/> 62 <constraint firstAttribute="bottom" secondItem="qPe-ff-jRp" secondAttribute="bottom" constant="5" id="jU7-xM-YKX"/>
63 <constraint firstItem="WGc-2i-Swk" firstAttribute="top" secondItem="GBx-lY-9YI" secondAttribute="top" id="knL-Yf-VTN"/> 63 <constraint firstItem="WGc-2i-Swk" firstAttribute="top" secondItem="GBx-lY-9YI" secondAttribute="top" id="knL-Yf-VTN"/>
64 <constraint firstAttribute="trailing" secondItem="p97-40-8m9" secondAttribute="trailing" id="sLL-ca-92S"/> 64 <constraint firstAttribute="trailing" secondItem="p97-40-8m9" secondAttribute="trailing" id="sLL-ca-92S"/>
65 <constraint firstAttribute="trailing" secondItem="WGc-2i-Swk" secondAttribute="trailing" id="v0h-pb-83W"/> 65 <constraint firstAttribute="trailing" secondItem="WGc-2i-Swk" secondAttribute="trailing" id="v0h-pb-83W"/>
66 </constraints> 66 </constraints>
67 </view> 67 </view>
68 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="syA-uK-pbr" customClass="CollectionView"> 68 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="syA-uK-pbr" customClass="CollectionView">
69 <rect key="frame" x="0.0" y="46" width="375" height="30"/> 69 <rect key="frame" x="0.0" y="46" width="375" height="30"/>
70 <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> 70 <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
71 <constraints> 71 <constraints>
72 <constraint firstAttribute="height" constant="30" id="ezW-Qs-M7K"/> 72 <constraint firstAttribute="height" constant="30" id="ezW-Qs-M7K"/>
73 </constraints> 73 </constraints>
74 </view> 74 </view>
75 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="B33-xX-Jro" customClass="CollectionView"> 75 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="B33-xX-Jro" customClass="CollectionView">
76 <rect key="frame" x="0.0" y="116" width="375" height="30"/> 76 <rect key="frame" x="0.0" y="116" width="375" height="30"/>
77 <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> 77 <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
78 <constraints> 78 <constraints>
79 <constraint firstAttribute="height" constant="30" id="snn-FM-11r"/> 79 <constraint firstAttribute="height" constant="30" id="snn-FM-11r"/>
80 </constraints> 80 </constraints>
81 </view> 81 </view>
82 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="u5D-xz-8dK"> 82 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="u5D-xz-8dK">
83 <rect key="frame" x="0.0" y="76" width="375" height="40"/> 83 <rect key="frame" x="0.0" y="76" width="375" height="40"/>
84 <subviews> 84 <subviews>
85 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="5Ro-k6-fvT"> 85 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="5Ro-k6-fvT">
86 <rect key="frame" x="0.0" y="0.0" width="375" height="40"/> 86 <rect key="frame" x="0.0" y="0.0" width="375" height="40"/>
87 <string key="text" base64-UTF8="YES"> 87 <string key="text" base64-UTF8="YES">
88 MjAxNuW5tCAx5pyIMjLml6XjgIDvvI3jgIAyMDE35bm0IDHmnIgyMeaXpQ0KAA 88 MjAxNuW5tCAx5pyIMjLml6XjgIDvvI3jgIAyMDE35bm0IDHmnIgyMeaXpQ0KAA
89 </string> 89 </string>
90 <fontDescription key="fontDescription" type="system" pointSize="13"/> 90 <fontDescription key="fontDescription" type="system" pointSize="13"/>
91 <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/> 91 <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
92 <nil key="highlightedColor"/> 92 <nil key="highlightedColor"/>
93 </label> 93 </label>
94 <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="eiH-Sk-3VV"> 94 <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="eiH-Sk-3VV">
95 <rect key="frame" x="15" y="5" width="30" height="30"/> 95 <rect key="frame" x="15" y="5" width="30" height="30"/>
96 <constraints> 96 <constraints>
97 <constraint firstAttribute="height" constant="30" id="kEd-sQ-0ub"/> 97 <constraint firstAttribute="height" constant="30" id="kEd-sQ-0ub"/>
98 <constraint firstAttribute="width" constant="30" id="sFT-sr-7pL"/> 98 <constraint firstAttribute="width" constant="30" id="sFT-sr-7pL"/>
99 </constraints> 99 </constraints>
100 <state key="normal" image="icon_left"/> 100 <state key="normal" image="icon_left"/>
101 <connections> 101 <connections>
102 <action selector="clickButton:" destination="-1" eventType="touchUpInside" id="f1Y-rj-F7d"/> 102 <action selector="clickBackward:" destination="-1" eventType="touchUpInside" id="8KB-3G-h6v"/>
103 </connections> 103 </connections>
104 </button> 104 </button>
105 <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Usl-Cl-d9d"> 105 <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Usl-Cl-d9d">
106 <rect key="frame" x="330" y="5" width="30" height="30"/> 106 <rect key="frame" x="330" y="5" width="30" height="30"/>
107 <constraints> 107 <constraints>
108 <constraint firstAttribute="width" constant="30" id="uFf-AY-LsL"/> 108 <constraint firstAttribute="width" constant="30" id="uFf-AY-LsL"/>
109 <constraint firstAttribute="height" constant="30" id="v8w-hV-CY1"/> 109 <constraint firstAttribute="height" constant="30" id="v8w-hV-CY1"/>
110 </constraints> 110 </constraints>
111 <state key="normal" image="icon_right"/> 111 <state key="normal" image="icon_right"/>
112 <connections> 112 <connections>
113 <action selector="clickButton:" destination="-1" eventType="touchUpInside" id="OB1-mE-CGE"/> 113 <action selector="clickForward:" destination="-1" eventType="touchUpInside" id="sgL-89-hXv"/>
114 </connections> 114 </connections>
115 </button> 115 </button>
116 </subviews> 116 </subviews>
117 <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> 117 <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
118 <constraints> 118 <constraints>
119 <constraint firstAttribute="height" constant="40" id="C5o-Zd-KjG"/> 119 <constraint firstAttribute="height" constant="40" id="C5o-Zd-KjG"/>
120 <constraint firstAttribute="bottom" secondItem="5Ro-k6-fvT" secondAttribute="bottom" id="DQQ-wh-s1Q"/> 120 <constraint firstAttribute="bottom" secondItem="5Ro-k6-fvT" secondAttribute="bottom" id="DQQ-wh-s1Q"/>
121 <constraint firstAttribute="trailing" secondItem="5Ro-k6-fvT" secondAttribute="trailing" id="E0c-bJ-AIi"/> 121 <constraint firstAttribute="trailing" secondItem="5Ro-k6-fvT" secondAttribute="trailing" id="E0c-bJ-AIi"/>
122 <constraint firstItem="5Ro-k6-fvT" firstAttribute="top" secondItem="u5D-xz-8dK" secondAttribute="top" id="Mrk-FC-rqh"/> 122 <constraint firstItem="5Ro-k6-fvT" firstAttribute="top" secondItem="u5D-xz-8dK" secondAttribute="top" id="Mrk-FC-rqh"/>
123 <constraint firstItem="eiH-Sk-3VV" firstAttribute="centerY" secondItem="u5D-xz-8dK" secondAttribute="centerY" id="k2J-Lc-ZDI"/> 123 <constraint firstItem="eiH-Sk-3VV" firstAttribute="centerY" secondItem="u5D-xz-8dK" secondAttribute="centerY" id="k2J-Lc-ZDI"/>
124 <constraint firstItem="5Ro-k6-fvT" firstAttribute="leading" secondItem="u5D-xz-8dK" secondAttribute="leading" id="rj5-0J-xs3"/> 124 <constraint firstItem="5Ro-k6-fvT" firstAttribute="leading" secondItem="u5D-xz-8dK" secondAttribute="leading" id="rj5-0J-xs3"/>
125 <constraint firstItem="Usl-Cl-d9d" firstAttribute="centerY" secondItem="u5D-xz-8dK" secondAttribute="centerY" id="sJX-n3-1pz"/> 125 <constraint firstItem="Usl-Cl-d9d" firstAttribute="centerY" secondItem="u5D-xz-8dK" secondAttribute="centerY" id="sJX-n3-1pz"/>
126 <constraint firstItem="eiH-Sk-3VV" firstAttribute="leading" secondItem="u5D-xz-8dK" secondAttribute="leading" constant="15" id="to7-WU-7xo"/> 126 <constraint firstItem="eiH-Sk-3VV" firstAttribute="leading" secondItem="u5D-xz-8dK" secondAttribute="leading" constant="15" id="to7-WU-7xo"/>
127 <constraint firstAttribute="trailing" secondItem="Usl-Cl-d9d" secondAttribute="trailing" constant="15" id="yDF-9k-XlW"/> 127 <constraint firstAttribute="trailing" secondItem="Usl-Cl-d9d" secondAttribute="trailing" constant="15" id="yDF-9k-XlW"/>
128 </constraints> 128 </constraints>
129 </view> 129 </view>
130 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="oUo-Eo-tz5" customClass="CollectionView"> 130 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="oUo-Eo-tz5" customClass="CollectionView">
131 <rect key="frame" x="0.0" y="577" width="375" height="40"/> 131 <rect key="frame" x="0.0" y="577" width="375" height="40"/>
132 <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> 132 <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
133 <constraints> 133 <constraints>
134 <constraint firstAttribute="height" constant="40" id="Trr-Ku-Ssy"/> 134 <constraint firstAttribute="height" constant="40" id="Trr-Ku-Ssy"/>
135 </constraints> 135 </constraints>
136 </view> 136 </view>
137 <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" style="plain" rowHeight="80" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="R3A-K9-MFe"> 137 <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" style="plain" rowHeight="80" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="R3A-K9-MFe">
138 <rect key="frame" x="0.0" y="147" width="375" height="429"/> 138 <rect key="frame" x="0.0" y="147" width="375" height="429"/>
139 <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> 139 <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
140 <color key="separatorColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> 140 <color key="separatorColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
141 <connections> 141 <connections>
142 <outlet property="dataSource" destination="-1" id="JJX-cg-LPL"/> 142 <outlet property="dataSource" destination="-1" id="JJX-cg-LPL"/>
143 <outlet property="delegate" destination="-1" id="u0m-93-lsi"/> 143 <outlet property="delegate" destination="-1" id="u0m-93-lsi"/>
144 </connections> 144 </connections>
145 </tableView> 145 </tableView>
146 </subviews> 146 </subviews>
147 <color key="backgroundColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/> 147 <color key="backgroundColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
148 <constraints> 148 <constraints>
149 <constraint firstItem="B33-xX-Jro" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" id="2Mu-hy-FVU"/> 149 <constraint firstItem="B33-xX-Jro" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" id="2Mu-hy-FVU"/>
150 <constraint firstItem="GBx-lY-9YI" firstAttribute="top" secondItem="i5M-Pr-FkT" secondAttribute="top" id="5CL-wT-MBg"/> 150 <constraint firstItem="GBx-lY-9YI" firstAttribute="top" secondItem="i5M-Pr-FkT" secondAttribute="top" id="5CL-wT-MBg"/>
151 <constraint firstItem="u5D-xz-8dK" firstAttribute="top" secondItem="syA-uK-pbr" secondAttribute="bottom" id="5uu-dZ-oXI"/> 151 <constraint firstItem="u5D-xz-8dK" firstAttribute="top" secondItem="syA-uK-pbr" secondAttribute="bottom" id="5uu-dZ-oXI"/>
152 <constraint firstItem="syA-uK-pbr" firstAttribute="top" secondItem="GBx-lY-9YI" secondAttribute="bottom" id="6FQ-vy-d4N"/> 152 <constraint firstItem="syA-uK-pbr" firstAttribute="top" secondItem="GBx-lY-9YI" secondAttribute="bottom" id="6FQ-vy-d4N"/>
153 <constraint firstItem="u5D-xz-8dK" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" id="75z-RN-ObF"/> 153 <constraint firstItem="u5D-xz-8dK" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" id="75z-RN-ObF"/>
154 <constraint firstItem="R3A-K9-MFe" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" id="LyL-9p-qcd"/> 154 <constraint firstItem="R3A-K9-MFe" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" id="LyL-9p-qcd"/>
155 <constraint firstItem="oUo-Eo-tz5" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" id="M7I-ue-lip"/> 155 <constraint firstItem="oUo-Eo-tz5" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" id="M7I-ue-lip"/>
156 <constraint firstAttribute="trailing" secondItem="B33-xX-Jro" secondAttribute="trailing" id="Pjd-Ay-GaV"/> 156 <constraint firstAttribute="trailing" secondItem="B33-xX-Jro" secondAttribute="trailing" id="Pjd-Ay-GaV"/>
157 <constraint firstItem="oUo-Eo-tz5" firstAttribute="top" secondItem="R3A-K9-MFe" secondAttribute="bottom" constant="1" id="QMu-aq-2Zt"/> 157 <constraint firstItem="oUo-Eo-tz5" firstAttribute="top" secondItem="R3A-K9-MFe" secondAttribute="bottom" constant="1" id="QMu-aq-2Zt"/>
158 <constraint firstAttribute="trailing" secondItem="syA-uK-pbr" secondAttribute="trailing" id="Qnl-Pp-y2G"/> 158 <constraint firstAttribute="trailing" secondItem="syA-uK-pbr" secondAttribute="trailing" id="Qnl-Pp-y2G"/>
159 <constraint firstItem="B33-xX-Jro" firstAttribute="top" secondItem="u5D-xz-8dK" secondAttribute="bottom" id="VOl-jo-wU3"/> 159 <constraint firstItem="B33-xX-Jro" firstAttribute="top" secondItem="u5D-xz-8dK" secondAttribute="bottom" id="VOl-jo-wU3"/>
160 <constraint firstItem="GBx-lY-9YI" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" id="YjB-ef-xTt"/> 160 <constraint firstItem="GBx-lY-9YI" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" id="YjB-ef-xTt"/>
161 <constraint firstItem="syA-uK-pbr" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" id="aTf-mb-wlT"/> 161 <constraint firstItem="syA-uK-pbr" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" id="aTf-mb-wlT"/>
162 <constraint firstAttribute="bottom" secondItem="oUo-Eo-tz5" secondAttribute="bottom" constant="50" id="cux-Vm-qq7"/> 162 <constraint firstAttribute="bottom" secondItem="oUo-Eo-tz5" secondAttribute="bottom" constant="50" id="cux-Vm-qq7"/>
163 <constraint firstAttribute="trailing" secondItem="R3A-K9-MFe" secondAttribute="trailing" id="jBn-JI-SQP"/> 163 <constraint firstAttribute="trailing" secondItem="R3A-K9-MFe" secondAttribute="trailing" id="jBn-JI-SQP"/>
164 <constraint firstItem="R3A-K9-MFe" firstAttribute="top" secondItem="B33-xX-Jro" secondAttribute="bottom" constant="1" id="jTi-59-XsZ"/> 164 <constraint firstItem="R3A-K9-MFe" firstAttribute="top" secondItem="B33-xX-Jro" secondAttribute="bottom" constant="1" id="jTi-59-XsZ"/>
165 <constraint firstAttribute="trailing" secondItem="u5D-xz-8dK" secondAttribute="trailing" id="mDB-o3-gtA"/> 165 <constraint firstAttribute="trailing" secondItem="u5D-xz-8dK" secondAttribute="trailing" id="mDB-o3-gtA"/>
166 <constraint firstAttribute="trailing" secondItem="GBx-lY-9YI" secondAttribute="trailing" id="yaf-8r-ySL"/> 166 <constraint firstAttribute="trailing" secondItem="GBx-lY-9YI" secondAttribute="trailing" id="yaf-8r-ySL"/>
167 <constraint firstAttribute="trailing" secondItem="oUo-Eo-tz5" secondAttribute="trailing" id="zkl-by-qMp"/> 167 <constraint firstAttribute="trailing" secondItem="oUo-Eo-tz5" secondAttribute="trailing" id="zkl-by-qMp"/>
168 </constraints> 168 </constraints>
169 <point key="canvasLocation" x="26.5" y="52.5"/> 169 <point key="canvasLocation" x="26.5" y="52.5"/>
170 </view> 170 </view>
171 </objects> 171 </objects>
172 <resources> 172 <resources>
173 <image name="icon_left" width="30" height="30"/> 173 <image name="icon_left" width="30" height="30"/>
174 <image name="icon_menu" width="30" height="30"/> 174 <image name="icon_menu" width="30" height="30"/>
175 <image name="icon_right" width="30" height="30"/> 175 <image name="icon_right" width="30" height="30"/>
176 <image name="today_back_button" width="73" height="37"/> 176 <image name="today_back_button" width="73" height="37"/>
177 </resources> 177 </resources>
178 </document> 178 </document>
179 179