Commit fcfef587834b053465a872d4fbf1a6dcc7f93244
1 parent
03a8708ee3
Exists in
master
and in
1 other branch
Add my group screen, add API get group list and update member list or tweet list when change group
Showing 12 changed files with 633 additions and 5 deletions Side-by-side Diff
- LifeLog/LifeLog.xcodeproj/project.pbxproj
- LifeLog/LifeLog/Assets.xcassets/History/arrow_down.imageset/Contents.json
- LifeLog/LifeLog/Assets.xcassets/History/arrow_down.imageset/arrow_down.png
- LifeLog/LifeLog/GroupDetailViewController.xib
- LifeLog/LifeLog/GroupObject.h
- LifeLog/LifeLog/GroupObject.m
- LifeLog/LifeLog/MyGroupViewController.h
- LifeLog/LifeLog/MyGroupViewController.m
- LifeLog/LifeLog/MyGroupViewController.xib
- LifeLog/LifeLog/SNSViewController.m
- LifeLog/LifeLog/ServerAPI.h
- LifeLog/LifeLog/ServerAPI.m
LifeLog/LifeLog.xcodeproj/project.pbxproj
| ... | ... | @@ -60,6 +60,8 @@ |
| 60 | 60 | E9497FD51F46EC1100E6AF8D /* MemberObject.m in Sources */ = {isa = PBXBuildFile; fileRef = E9497FD41F46EC1100E6AF8D /* MemberObject.m */; }; |
| 61 | 61 | E95F4CED1F475C6A00D27E80 /* CreateGroupViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E95F4CEB1F475C6A00D27E80 /* CreateGroupViewController.m */; }; |
| 62 | 62 | E95F4CEE1F475C6A00D27E80 /* CreateGroupViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = E95F4CEC1F475C6A00D27E80 /* CreateGroupViewController.xib */; }; |
| 63 | + E95F4CF31F48B39200D27E80 /* MyGroupViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E95F4CF11F48B39200D27E80 /* MyGroupViewController.m */; }; | |
| 64 | + E95F4CF41F48B39200D27E80 /* MyGroupViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = E95F4CF21F48B39200D27E80 /* MyGroupViewController.xib */; }; | |
| 63 | 65 | E9682E2E1F39675A00FE05A2 /* RankingTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E9682E2C1F39675A00FE05A2 /* RankingTableViewCell.m */; }; |
| 64 | 66 | E9682E2F1F39675A00FE05A2 /* RankingTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = E9682E2D1F39675A00FE05A2 /* RankingTableViewCell.xib */; }; |
| 65 | 67 | E968550A1F3C444900317CEF /* AutoTransButton.m in Sources */ = {isa = PBXBuildFile; fileRef = E96855091F3C444900317CEF /* AutoTransButton.m */; }; |
| ... | ... | @@ -189,6 +191,9 @@ |
| 189 | 191 | E95F4CEA1F475C6A00D27E80 /* CreateGroupViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CreateGroupViewController.h; sourceTree = "<group>"; }; |
| 190 | 192 | E95F4CEB1F475C6A00D27E80 /* CreateGroupViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CreateGroupViewController.m; sourceTree = "<group>"; }; |
| 191 | 193 | E95F4CEC1F475C6A00D27E80 /* CreateGroupViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CreateGroupViewController.xib; sourceTree = "<group>"; }; |
| 194 | + E95F4CF01F48B39200D27E80 /* MyGroupViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MyGroupViewController.h; sourceTree = "<group>"; }; | |
| 195 | + E95F4CF11F48B39200D27E80 /* MyGroupViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MyGroupViewController.m; sourceTree = "<group>"; }; | |
| 196 | + E95F4CF21F48B39200D27E80 /* MyGroupViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MyGroupViewController.xib; sourceTree = "<group>"; }; | |
| 192 | 197 | E9682E2B1F39675A00FE05A2 /* RankingTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RankingTableViewCell.h; sourceTree = "<group>"; }; |
| 193 | 198 | E9682E2C1F39675A00FE05A2 /* RankingTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RankingTableViewCell.m; sourceTree = "<group>"; }; |
| 194 | 199 | E9682E2D1F39675A00FE05A2 /* RankingTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RankingTableViewCell.xib; sourceTree = "<group>"; }; |
| ... | ... | @@ -441,6 +446,7 @@ |
| 441 | 446 | 6E84E3AC1F27A954001EB88E /* SNS */ = { |
| 442 | 447 | isa = PBXGroup; |
| 443 | 448 | children = ( |
| 449 | + E95F4CEF1F48B37100D27E80 /* MyGroup */, | |
| 444 | 450 | E95F4CE91F475C4B00D27E80 /* CreateGroup */, |
| 445 | 451 | E933E6751F4050E6002926F5 /* GroupDetail */, |
| 446 | 452 | E933E6671F3E0479002926F5 /* SeachGroup */, |
| ... | ... | @@ -597,6 +603,16 @@ |
| 597 | 603 | name = CreateGroup; |
| 598 | 604 | sourceTree = "<group>"; |
| 599 | 605 | }; |
| 606 | + E95F4CEF1F48B37100D27E80 /* MyGroup */ = { | |
| 607 | + isa = PBXGroup; | |
| 608 | + children = ( | |
| 609 | + E95F4CF01F48B39200D27E80 /* MyGroupViewController.h */, | |
| 610 | + E95F4CF11F48B39200D27E80 /* MyGroupViewController.m */, | |
| 611 | + E95F4CF21F48B39200D27E80 /* MyGroupViewController.xib */, | |
| 612 | + ); | |
| 613 | + name = MyGroup; | |
| 614 | + sourceTree = "<group>"; | |
| 615 | + }; | |
| 600 | 616 | E99E13A71F336F0C00C78787 /* CustomView */ = { |
| 601 | 617 | isa = PBXGroup; |
| 602 | 618 | children = ( |
| ... | ... | @@ -745,6 +761,7 @@ |
| 745 | 761 | 6EF1630A1F29069300DA306C /* Localizable.strings in Resources */, |
| 746 | 762 | 6E84E3B11F27A975001EB88E /* HomeViewController.xib in Resources */, |
| 747 | 763 | 6E84E3B61F27A98B001EB88E /* HistoryViewController.xib in Resources */, |
| 764 | + E95F4CF41F48B39200D27E80 /* MyGroupViewController.xib in Resources */, | |
| 748 | 765 | E933E66C1F3E04A6002926F5 /* SearchGroupViewController.xib in Resources */, |
| 749 | 766 | E96855121F3C5D9A00317CEF /* SNSRecentTopicTableViewCell.xib in Resources */, |
| 750 | 767 | E933E67A1F40513C002926F5 /* GroupDetailViewController.xib in Resources */, |
| ... | ... | @@ -861,6 +878,7 @@ |
| 861 | 878 | 6E84E3761F27A701001EB88E /* main.m in Sources */, |
| 862 | 879 | E933E6701F3E09B6002926F5 /* SearchGroupTableViewCell.m in Sources */, |
| 863 | 880 | 6E84E3B51F27A98B001EB88E /* HistoryViewController.m in Sources */, |
| 881 | + E95F4CF31F48B39200D27E80 /* MyGroupViewController.m in Sources */, | |
| 864 | 882 | E9373E4D1F361A230059355A /* HistoryGraphObject.m in Sources */, |
| 865 | 883 | E933E66B1F3E04A6002926F5 /* SearchGroupViewController.m in Sources */, |
| 866 | 884 | 6E84E3BF1F27A9B1001EB88E /* SNSViewController.m in Sources */, |
LifeLog/LifeLog/Assets.xcassets/History/arrow_down.imageset/Contents.json
| 1 | +{ | |
| 2 | + "images" : [ | |
| 3 | + { | |
| 4 | + "idiom" : "universal", | |
| 5 | + "scale" : "1x" | |
| 6 | + }, | |
| 7 | + { | |
| 8 | + "idiom" : "universal", | |
| 9 | + "filename" : "arrow_down.png", | |
| 10 | + "scale" : "2x" | |
| 11 | + }, | |
| 12 | + { | |
| 13 | + "idiom" : "universal", | |
| 14 | + "scale" : "3x" | |
| 15 | + } | |
| 16 | + ], | |
| 17 | + "info" : { | |
| 18 | + "version" : 1, | |
| 19 | + "author" : "xcode" | |
| 20 | + } | |
| 21 | +} |
LifeLog/LifeLog/Assets.xcassets/History/arrow_down.imageset/arrow_down.png
527 Bytes
LifeLog/LifeLog/GroupDetailViewController.xib
| ... | ... | @@ -89,7 +89,7 @@ |
| 89 | 89 | <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/> |
| 90 | 90 | <nil key="highlightedColor"/> |
| 91 | 91 | </label> |
| 92 | - <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Bdy-dI-j47"> | |
| 92 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Bdy-dI-j47"> | |
| 93 | 93 | <rect key="frame" x="15" y="160" width="345" height="80"/> |
| 94 | 94 | <constraints> |
| 95 | 95 | <constraint firstAttribute="height" constant="80" id="jgH-57-Bae"/> |
LifeLog/LifeLog/GroupObject.h
| ... | ... | @@ -34,6 +34,7 @@ |
| 34 | 34 | |
| 35 | 35 | @property (nonatomic, strong) NSDate * createDate; |
| 36 | 36 | |
| 37 | +-(id) initWithShortData : (NSDictionary *) dict; | |
| 37 | 38 | -(id) initWithData : (NSDictionary *) dict; |
| 38 | 39 | -(id) initWithData : (NSDictionary *) dict andGroupID : (int) groupID; |
| 39 | 40 | -(void) updateDate : (GroupObject *) obj; |
LifeLog/LifeLog/GroupObject.m
| ... | ... | @@ -10,6 +10,17 @@ |
| 10 | 10 | #import "Utilities.h" |
| 11 | 11 | |
| 12 | 12 | @implementation GroupObject |
| 13 | + | |
| 14 | +-(id) initWithShortData : (NSDictionary *) dict { | |
| 15 | + if([dict objectForKey:@"id"] != nil) { | |
| 16 | + self.groupID = [dict[@"id"] intValue]; | |
| 17 | + } | |
| 18 | + if([dict objectForKey:@"group_name"] != nil) { | |
| 19 | + self.name = dict[@"group_name"]; | |
| 20 | + } | |
| 21 | + return self; | |
| 22 | +} | |
| 23 | + | |
| 13 | 24 | -(id) initWithData : (NSDictionary *) dict { |
| 14 | 25 | if([dict objectForKey:@"group_id"] != nil) { |
| 15 | 26 | self.groupID = [dict[@"group_id"] intValue]; |
LifeLog/LifeLog/MyGroupViewController.h
| 1 | +// | |
| 2 | +// MyGroupViewController.h | |
| 3 | +// LifeLog | |
| 4 | +// | |
| 5 | +// Created by nvtu on 8/20/17. | |
| 6 | +// Copyright ยฉ 2017 PhongNV. All rights reserved. | |
| 7 | +// | |
| 8 | + | |
| 9 | +#import <UIKit/UIKit.h> | |
| 10 | +#import "BaseTableViewController.h" | |
| 11 | +#import "AutoTransButton.h" | |
| 12 | +#import "Entities.h" | |
| 13 | + | |
| 14 | +@interface MyGroupViewController : BaseTableViewController { | |
| 15 | + NSMutableArray *_curListGrp; | |
| 16 | + GroupObject *_curGroup; | |
| 17 | + BOOL isMemberList; | |
| 18 | +} | |
| 19 | + | |
| 20 | +@property (weak, nonatomic) IBOutlet UITableView *tableGrp; | |
| 21 | + | |
| 22 | +@property (weak, nonatomic) IBOutlet UILabel *lblGroupName; | |
| 23 | +@property (weak, nonatomic) IBOutlet UILabel *lblActiveMode; | |
| 24 | +@property (weak, nonatomic) IBOutlet UILabel *lblGoal; | |
| 25 | +@property (weak, nonatomic) IBOutlet UIButton *btShowGrp; | |
| 26 | +@property (weak, nonatomic) IBOutlet AutoTransButton *btSwitch; | |
| 27 | + | |
| 28 | +- (IBAction)clickBack:(id)sender; | |
| 29 | +- (IBAction)clickShowGrp:(id)sender; | |
| 30 | +- (IBAction)clickSwitch:(id)sender; | |
| 31 | + | |
| 32 | +@end |
LifeLog/LifeLog/MyGroupViewController.m
| 1 | +// | |
| 2 | +// MyGroupViewController.m | |
| 3 | +// LifeLog | |
| 4 | +// | |
| 5 | +// Created by nvtu on 8/20/17. | |
| 6 | +// Copyright ยฉ 2017 PhongNV. All rights reserved. | |
| 7 | +// | |
| 8 | + | |
| 9 | +#import "MyGroupViewController.h" | |
| 10 | +#import <SDWebImage/UIImageView+WebCache.h> | |
| 11 | + | |
| 12 | +#import "Utilities.h" | |
| 13 | +#import "ServerAPI.h" | |
| 14 | +#import "SNSRecentTopicTableViewCell.h" | |
| 15 | + | |
| 16 | +@interface MyGroupViewController () | |
| 17 | + | |
| 18 | +@end | |
| 19 | + | |
| 20 | +@implementation MyGroupViewController | |
| 21 | + | |
| 22 | +- (void)viewDidLoad { | |
| 23 | + [super viewDidLoad]; | |
| 24 | + isMemberList = false; | |
| 25 | + _curListGrp = [[NSMutableArray alloc] init]; | |
| 26 | + [self.tableBase registerNib:[UINib nibWithNibName:@"SNSRecentTopicTableViewCell" bundle:nil] forCellReuseIdentifier:@"RecentTopicCell"]; | |
| 27 | + | |
| 28 | + [self requestGroupList]; | |
| 29 | + // Do any additional setup after loading the view from its nib. | |
| 30 | +} | |
| 31 | + | |
| 32 | +- (void)didReceiveMemoryWarning { | |
| 33 | + [super didReceiveMemoryWarning]; | |
| 34 | + // Dispose of any resources that can be recreated. | |
| 35 | +} | |
| 36 | + | |
| 37 | +- (void)setupView { | |
| 38 | + if(_curGroup != nil) { | |
| 39 | + [self.lblGoal setText:_curGroup.goal]; | |
| 40 | + NSString *mode = @""; | |
| 41 | + if(_curGroup.runMode) { | |
| 42 | + mode = [mode stringByAppendingString:NSLocalizedString(@"lifelog.grDetail.mode.running", nil)]; | |
| 43 | + mode = [mode stringByAppendingString:@"\n"]; | |
| 44 | + } | |
| 45 | + if(_curGroup.walkMode) { | |
| 46 | + mode = [mode stringByAppendingString:NSLocalizedString(@"lifelog.grDetail.mode.walking", nil)]; | |
| 47 | + mode = [mode stringByAppendingString:@"\n"]; | |
| 48 | + } | |
| 49 | + if(_curGroup.bikeMode) { | |
| 50 | + mode = [mode stringByAppendingString:NSLocalizedString(@"lifelog.grDetail.mode.bike", nil)]; | |
| 51 | + mode = [mode stringByAppendingString:@"\n"]; | |
| 52 | + } | |
| 53 | + if(_curGroup.stepMode) { | |
| 54 | + mode = [mode stringByAppendingString:NSLocalizedString(@"lifelog.grDetail.mode.step", nil)]; | |
| 55 | + mode = [mode stringByAppendingString:@"\n"]; | |
| 56 | + } | |
| 57 | + if(_curGroup.beginMode) { | |
| 58 | + mode = [mode stringByAppendingString:NSLocalizedString(@"lifelog.grDetail.mode.begin", nil)]; | |
| 59 | + mode = [mode stringByAppendingString:@"\n"]; | |
| 60 | + } | |
| 61 | + if(_curGroup.gymMode) { | |
| 62 | + mode = [mode stringByAppendingString:NSLocalizedString(@"lifelog.grDetail.mode.gym", nil)]; | |
| 63 | + mode = [mode stringByAppendingString:@"\n"]; | |
| 64 | + } | |
| 65 | + NSRange range = [mode rangeOfString:@"\n" options:NSBackwardsSearch]; | |
| 66 | + if(range.length > 0) { | |
| 67 | + mode = [mode stringByReplacingOccurrencesOfString:@"\n" withString:@"" options:NSBackwardsSearch range:range]; | |
| 68 | + } | |
| 69 | + self.lblActiveMode.text = mode; | |
| 70 | + } | |
| 71 | +} | |
| 72 | + | |
| 73 | +#pragma mark IBAction | |
| 74 | + | |
| 75 | +- (IBAction)clickBack:(id)sender { | |
| 76 | + [self.navigationController popViewControllerAnimated:true]; | |
| 77 | +} | |
| 78 | + | |
| 79 | +- (IBAction)clickShowGrp:(id)sender { | |
| 80 | + self.tableGrp.hidden = !self.tableGrp.isHidden; | |
| 81 | +} | |
| 82 | + | |
| 83 | +- (IBAction)clickSwitch:(id)sender { | |
| 84 | + isMemberList = !isMemberList; | |
| 85 | + if(isMemberList) { | |
| 86 | + [sender setTitle:NSLocalizedString(@"lifelog.grDetail.bt.viewTweet", nil) forState:UIControlStateNormal]; | |
| 87 | + } | |
| 88 | + else { | |
| 89 | + [sender setTitle:NSLocalizedString(@"lifelog.grDetail.bt.viewMem", nil) forState:UIControlStateNormal]; | |
| 90 | + } | |
| 91 | + [sender setUserInteractionEnabled:false]; | |
| 92 | + [self resetData]; | |
| 93 | +} | |
| 94 | + | |
| 95 | +#pragma mark UITableView Delegate | |
| 96 | +-(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView { | |
| 97 | + if(tableView == self.tableGrp) | |
| 98 | + return 1; | |
| 99 | + else | |
| 100 | + return [super numberOfSectionsInTableView:tableView]; | |
| 101 | +} | |
| 102 | + | |
| 103 | +- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { | |
| 104 | + if(tableView == self.tableGrp) | |
| 105 | + return _curListGrp.count; | |
| 106 | + else | |
| 107 | + return [super tableView:tableView numberOfRowsInSection:section]; | |
| 108 | +} | |
| 109 | + | |
| 110 | +- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { | |
| 111 | + if(tableView == self.tableGrp) { | |
| 112 | + UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"GroupCell"]; | |
| 113 | + if(cell == nil) { | |
| 114 | + cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"GroupCell"]; | |
| 115 | + } | |
| 116 | + GroupObject *object = [_curListGrp objectAtIndex:indexPath.row]; | |
| 117 | + cell.textLabel.text = object.name; | |
| 118 | + return cell; | |
| 119 | + } | |
| 120 | + else { | |
| 121 | + SNSRecentTopicTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"RecentTopicCell"]; | |
| 122 | + if(isMemberList) { | |
| 123 | + MemberObject *object = [_curDataList objectAtIndex:indexPath.row]; | |
| 124 | + if(object.avatar && ![object.avatar isKindOfClass:[NSNull class]]) { | |
| 125 | + [cell.imgAvatar sd_setImageWithURL:[NSURL URLWithString:[Utilities getImageLink:object.avatar]]]; | |
| 126 | + } | |
| 127 | + else { | |
| 128 | + [cell.imgAvatar setImage:[UIImage imageNamed:@"avatar_default"]]; | |
| 129 | + } | |
| 130 | + cell.lblUsername.text = @""; | |
| 131 | + cell.lblDateTime.text = @""; | |
| 132 | + cell.lblDes.text = object.userName; | |
| 133 | + cell.lblMode.text = @""; | |
| 134 | + cell.lblDistance.text = @""; | |
| 135 | + cell.lblDuration.text = @""; | |
| 136 | + } | |
| 137 | + else { | |
| 138 | + TweetObject *object = [_curDataList objectAtIndex:indexPath.row]; | |
| 139 | + if(object.avatar && ![object.avatar isKindOfClass:[NSNull class]]) { | |
| 140 | + [cell.imgAvatar sd_setImageWithURL:[NSURL URLWithString:[Utilities getImageLink:object.avatar]]]; | |
| 141 | + } | |
| 142 | + else { | |
| 143 | + [cell.imgAvatar setImage:[UIImage imageNamed:@"avatar_default"]]; | |
| 144 | + } | |
| 145 | + cell.lblDateTime.text = [Utilities stringFromDate:object.createDate withFormat:@"YYYY/MM/dd hh:mm"]; | |
| 146 | + cell.lblUsername.text = object.userName; | |
| 147 | + cell.lblDes.text = object.content; | |
| 148 | + cell.lblMode.text = object.mode; | |
| 149 | + cell.lblDistance.text = [NSString stringWithFormat:@"%.0f m", object.distance]; | |
| 150 | + cell.lblDuration.text = object.time; | |
| 151 | + } | |
| 152 | + return cell; | |
| 153 | + } | |
| 154 | +} | |
| 155 | + | |
| 156 | +- (void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { | |
| 157 | + if(tableView == self.tableGrp) { | |
| 158 | + return; | |
| 159 | + } | |
| 160 | + [super tableView:tableView willDisplayCell:cell forRowAtIndexPath:indexPath]; | |
| 161 | +} | |
| 162 | + | |
| 163 | +-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { | |
| 164 | + if(tableView == self.tableGrp) { | |
| 165 | + [tableView setHidden:true]; | |
| 166 | + [self resetGroupData:indexPath.row]; | |
| 167 | + } | |
| 168 | +} | |
| 169 | + | |
| 170 | +#pragma mark Private Function | |
| 171 | + | |
| 172 | +- (void) resetGroupData : (int) index { | |
| 173 | + _curGroup = [_curListGrp objectAtIndex:index]; | |
| 174 | + self.lblGroupName.text = _curGroup.name; | |
| 175 | + [_curDataList removeAllObjects]; | |
| 176 | + [self.tableBase reloadData]; | |
| 177 | + [self requestGroupDetail]; | |
| 178 | +} | |
| 179 | + | |
| 180 | +- (void) requestGroupList { | |
| 181 | + NSString * token = [[NSUserDefaults standardUserDefaults] stringForKey:kToken]; | |
| 182 | + MBProgressHUD *hudView = [MBProgressHUD showHUDAddedTo:self.view animated:true]; | |
| 183 | + [[ServerAPI server] requestGroupList:token CompletionHandler:^(NSArray *array, NSError *error) { | |
| 184 | + if(error == nil) { | |
| 185 | + [_curListGrp removeAllObjects]; | |
| 186 | + [_curListGrp addObjectsFromArray:array]; | |
| 187 | + MyGroupViewController __weak *weakSelf = self; | |
| 188 | + dispatch_async(dispatch_get_main_queue(), ^{ | |
| 189 | + [hudView hideAnimated:true]; | |
| 190 | + [self.tableGrp reloadData]; | |
| 191 | + if(_curListGrp.count > 0) { | |
| 192 | + [weakSelf resetGroupData:0]; | |
| 193 | + } | |
| 194 | + else { | |
| 195 | + weakSelf.lblGroupName.text = @"No Group"; | |
| 196 | + } | |
| 197 | + [weakSelf.btShowGrp setEnabled:(_curListGrp.count > 0)]; | |
| 198 | + }); | |
| 199 | + } | |
| 200 | + }]; | |
| 201 | +} | |
| 202 | + | |
| 203 | +- (void) requestGroupDetail { | |
| 204 | + NSString * token = [[NSUserDefaults standardUserDefaults] stringForKey:kToken]; | |
| 205 | + MBProgressHUD *hudView = [MBProgressHUD showHUDAddedTo:self.view animated:true]; | |
| 206 | + [[ServerAPI server] getGroupDetail:token withGroupID:_curGroup.groupID CompletionHandler:^(GroupObject *object, NSError *error) { | |
| 207 | + MyGroupViewController __weak *weakSelf = self; | |
| 208 | + [_curGroup updateDate:object]; | |
| 209 | + dispatch_async(dispatch_get_main_queue(), ^{ | |
| 210 | + [hudView hideAnimated:true]; | |
| 211 | + [weakSelf setupView]; | |
| 212 | + [weakSelf callRequestToUpdateData]; | |
| 213 | + }); | |
| 214 | + }]; | |
| 215 | +} | |
| 216 | + | |
| 217 | +-(void) callRequestToUpdateData { | |
| 218 | + [super callRequestToUpdateData]; | |
| 219 | + | |
| 220 | + NSString * token = [[NSUserDefaults standardUserDefaults] stringForKey:kToken]; | |
| 221 | + MBProgressHUD *hudView = nil; | |
| 222 | + if(_curPage == 1 && !self.refreshControl.isRefreshing) { | |
| 223 | + hudView = [MBProgressHUD showHUDAddedTo:self.view animated:true]; | |
| 224 | + } | |
| 225 | + if(isMemberList) { | |
| 226 | + [[ServerAPI server] requestMemberList:token groupID:_curGroup.groupID withPage:_curPage CompletionHandler:^(NSArray *array, NSError *error){ | |
| 227 | + dispatch_async(dispatch_get_main_queue(), ^{ | |
| 228 | + if(hudView != nil) { | |
| 229 | + [hudView hideAnimated:true]; | |
| 230 | + } | |
| 231 | + }); | |
| 232 | + MyGroupViewController __weak *weakSelf = self; | |
| 233 | + [weakSelf updateTableData:array error:error]; | |
| 234 | + [weakSelf.btSwitch setUserInteractionEnabled:true]; | |
| 235 | + }]; | |
| 236 | + } | |
| 237 | + else { | |
| 238 | + [[ServerAPI server] requestTweetsList:token groupID:_curGroup.groupID withPage:_curPage CompletionHandler:^(NSArray *array, NSError *error){ | |
| 239 | + dispatch_async(dispatch_get_main_queue(), ^{ | |
| 240 | + if(hudView != nil) { | |
| 241 | + [hudView hideAnimated:true]; | |
| 242 | + } | |
| 243 | + }); | |
| 244 | + MyGroupViewController __weak *weakSelf = self; | |
| 245 | + [weakSelf updateTableData:array error:error]; | |
| 246 | + [weakSelf.btSwitch setUserInteractionEnabled:true]; | |
| 247 | + }]; | |
| 248 | + } | |
| 249 | +} | |
| 250 | + | |
| 251 | +@end |
LifeLog/LifeLog/MyGroupViewController.xib
| 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"> | |
| 3 | + <device id="retina4_7" orientation="portrait"> | |
| 4 | + <adaptation id="fullscreen"/> | |
| 5 | + </device> | |
| 6 | + <dependencies> | |
| 7 | + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12086"/> | |
| 8 | + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> | |
| 9 | + </dependencies> | |
| 10 | + <objects> | |
| 11 | + <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="MyGroupViewController"> | |
| 12 | + <connections> | |
| 13 | + <outlet property="btShowGrp" destination="MvK-5R-njL" id="bcb-N7-jbu"/> | |
| 14 | + <outlet property="btSwitch" destination="eBu-7L-nsx" id="od6-v0-6eh"/> | |
| 15 | + <outlet property="lblActiveMode" destination="P1r-ft-imP" id="WRV-YQ-1IY"/> | |
| 16 | + <outlet property="lblGoal" destination="ftA-wa-19F" id="Ziv-cg-at5"/> | |
| 17 | + <outlet property="lblGroupName" destination="xXv-SO-m4h" id="yGe-lh-RC3"/> | |
| 18 | + <outlet property="tableBase" destination="ubS-v9-zCa" id="gea-9H-gpI"/> | |
| 19 | + <outlet property="tableGrp" destination="dtD-J5-dze" id="ahq-Cd-85X"/> | |
| 20 | + <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/> | |
| 21 | + </connections> | |
| 22 | + </placeholder> | |
| 23 | + <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> | |
| 24 | + <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT"> | |
| 25 | + <rect key="frame" x="0.0" y="0.0" width="375" height="667"/> | |
| 26 | + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> | |
| 27 | + <subviews> | |
| 28 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="vxT-xe-7mV" userLabel="ViewHeader"> | |
| 29 | + <rect key="frame" x="0.0" y="0.0" width="375" height="46"/> | |
| 30 | + <subviews> | |
| 31 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="SNS" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Txe-1I-61m" customClass="AutoTransLabel"> | |
| 32 | + <rect key="frame" x="0.0" y="0.0" width="375" height="46"/> | |
| 33 | + <fontDescription key="fontDescription" type="system" pointSize="17"/> | |
| 34 | + <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/> | |
| 35 | + <nil key="highlightedColor"/> | |
| 36 | + <userDefinedRuntimeAttributes> | |
| 37 | + <userDefinedRuntimeAttribute type="string" keyPath="localizeKey" value="lifelog.grDetail.title"/> | |
| 38 | + </userDefinedRuntimeAttributes> | |
| 39 | + </label> | |
| 40 | + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="DjI-qB-WTG"> | |
| 41 | + <rect key="frame" x="0.0" y="5" width="70" height="36"/> | |
| 42 | + <constraints> | |
| 43 | + <constraint firstAttribute="width" constant="70" id="Q1G-tI-sgx"/> | |
| 44 | + </constraints> | |
| 45 | + <state key="normal" image="today_back_button"/> | |
| 46 | + <connections> | |
| 47 | + <action selector="clickBack:" destination="-1" eventType="touchUpInside" id="93y-uZ-J2W"/> | |
| 48 | + </connections> | |
| 49 | + </button> | |
| 50 | + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="7gh-nf-sKZ"> | |
| 51 | + <rect key="frame" x="330" y="0.0" width="45" height="46"/> | |
| 52 | + <constraints> | |
| 53 | + <constraint firstAttribute="width" constant="45" id="Vw3-60-kvV"/> | |
| 54 | + </constraints> | |
| 55 | + <state key="normal" image="icon_menu"/> | |
| 56 | + </button> | |
| 57 | + </subviews> | |
| 58 | + <color key="backgroundColor" red="0.098039215690000001" green="0.098039215690000001" blue="0.098039215690000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> | |
| 59 | + <constraints> | |
| 60 | + <constraint firstAttribute="trailing" secondItem="7gh-nf-sKZ" secondAttribute="trailing" id="2JD-YU-WS2"/> | |
| 61 | + <constraint firstItem="Txe-1I-61m" firstAttribute="leading" secondItem="vxT-xe-7mV" secondAttribute="leading" id="30c-J3-6ba"/> | |
| 62 | + <constraint firstAttribute="bottom" secondItem="7gh-nf-sKZ" secondAttribute="bottom" id="61g-Gv-ka0"/> | |
| 63 | + <constraint firstAttribute="bottom" secondItem="Txe-1I-61m" secondAttribute="bottom" id="BZZ-wj-MGj"/> | |
| 64 | + <constraint firstItem="7gh-nf-sKZ" firstAttribute="top" secondItem="vxT-xe-7mV" secondAttribute="top" id="DKT-Ea-U3k"/> | |
| 65 | + <constraint firstAttribute="trailing" secondItem="Txe-1I-61m" secondAttribute="trailing" id="WA1-1W-49C"/> | |
| 66 | + <constraint firstItem="DjI-qB-WTG" firstAttribute="leading" secondItem="vxT-xe-7mV" secondAttribute="leading" id="tA3-JF-Kjj"/> | |
| 67 | + <constraint firstAttribute="bottom" secondItem="DjI-qB-WTG" secondAttribute="bottom" constant="5" id="uFc-I1-M2c"/> | |
| 68 | + <constraint firstItem="Txe-1I-61m" firstAttribute="top" secondItem="vxT-xe-7mV" secondAttribute="top" id="ucO-rK-wAV"/> | |
| 69 | + <constraint firstItem="DjI-qB-WTG" firstAttribute="top" secondItem="vxT-xe-7mV" secondAttribute="top" constant="5" id="vR3-xv-3hD"/> | |
| 70 | + <constraint firstAttribute="height" constant="46" id="yIJ-Mu-bPA"/> | |
| 71 | + </constraints> | |
| 72 | + </view> | |
| 73 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="hhh-nO-yn5"> | |
| 74 | + <rect key="frame" x="15" y="54" width="345" height="36"/> | |
| 75 | + <subviews> | |
| 76 | + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="MvK-5R-njL"> | |
| 77 | + <rect key="frame" x="289" y="0.0" width="56" height="36"/> | |
| 78 | + <constraints> | |
| 79 | + <constraint firstAttribute="width" constant="56" id="l8Q-On-RNy"/> | |
| 80 | + </constraints> | |
| 81 | + <state key="normal" backgroundImage="arrow_down"/> | |
| 82 | + <connections> | |
| 83 | + <action selector="clickShowGrp:" destination="-1" eventType="touchUpInside" id="yfd-Yu-fTF"/> | |
| 84 | + </connections> | |
| 85 | + </button> | |
| 86 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="xXv-SO-m4h"> | |
| 87 | + <rect key="frame" x="5" y="0.0" width="284" height="36"/> | |
| 88 | + <fontDescription key="fontDescription" type="system" pointSize="16"/> | |
| 89 | + <nil key="textColor"/> | |
| 90 | + <nil key="highlightedColor"/> | |
| 91 | + </label> | |
| 92 | + </subviews> | |
| 93 | + <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> | |
| 94 | + <constraints> | |
| 95 | + <constraint firstAttribute="trailing" secondItem="MvK-5R-njL" secondAttribute="trailing" id="IS8-5J-ypb"/> | |
| 96 | + <constraint firstAttribute="bottom" secondItem="MvK-5R-njL" secondAttribute="bottom" id="IVS-f9-RjH"/> | |
| 97 | + <constraint firstAttribute="bottom" secondItem="xXv-SO-m4h" secondAttribute="bottom" id="Ino-7v-CKz"/> | |
| 98 | + <constraint firstItem="MvK-5R-njL" firstAttribute="top" secondItem="hhh-nO-yn5" secondAttribute="top" id="NlH-tz-ByC"/> | |
| 99 | + <constraint firstAttribute="height" constant="36" id="O8T-vH-tg6"/> | |
| 100 | + <constraint firstItem="MvK-5R-njL" firstAttribute="leading" secondItem="xXv-SO-m4h" secondAttribute="trailing" id="V51-fg-KCf"/> | |
| 101 | + <constraint firstItem="xXv-SO-m4h" firstAttribute="leading" secondItem="hhh-nO-yn5" secondAttribute="leading" constant="5" id="eY6-uq-qWx"/> | |
| 102 | + <constraint firstItem="xXv-SO-m4h" firstAttribute="top" secondItem="hhh-nO-yn5" secondAttribute="top" id="l3a-Th-4Kb"/> | |
| 103 | + </constraints> | |
| 104 | + <userDefinedRuntimeAttributes> | |
| 105 | + <userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius"> | |
| 106 | + <integer key="value" value="5"/> | |
| 107 | + </userDefinedRuntimeAttribute> | |
| 108 | + </userDefinedRuntimeAttributes> | |
| 109 | + </view> | |
| 110 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="SNe-1B-nwV"> | |
| 111 | + <rect key="frame" x="15" y="105" width="345" height="105"/> | |
| 112 | + <subviews> | |
| 113 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ใฐใซใผใ VMAP ใขใกใชใซใซใผใ๏ผ๏ผๅฎ่ตฐ" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="hyY-rU-WJx"> | |
| 114 | + <rect key="frame" x="8" y="8" width="329" height="20"/> | |
| 115 | + <constraints> | |
| 116 | + <constraint firstAttribute="height" constant="20" id="dx4-Lw-gRP"/> | |
| 117 | + </constraints> | |
| 118 | + <fontDescription key="fontDescription" type="system" pointSize="15"/> | |
| 119 | + <nil key="textColor"/> | |
| 120 | + <nil key="highlightedColor"/> | |
| 121 | + </label> | |
| 122 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="P1r-ft-imP"> | |
| 123 | + <rect key="frame" x="8" y="36" width="155" height="61"/> | |
| 124 | + <constraints> | |
| 125 | + <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="61" id="6m3-4u-yjQ"/> | |
| 126 | + <constraint firstAttribute="width" constant="155" id="bJa-4P-B84"/> | |
| 127 | + </constraints> | |
| 128 | + <fontDescription key="fontDescription" type="system" pointSize="15"/> | |
| 129 | + <nil key="textColor"/> | |
| 130 | + <nil key="highlightedColor"/> | |
| 131 | + </label> | |
| 132 | + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="fXA-Zh-ABB" customClass="AutoTransButton"> | |
| 133 | + <rect key="frame" x="171" y="67" width="166" height="30"/> | |
| 134 | + <color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/> | |
| 135 | + <constraints> | |
| 136 | + <constraint firstAttribute="height" constant="30" id="4bu-TU-hhR"/> | |
| 137 | + <constraint firstAttribute="width" constant="166" id="hcm-Nd-TE4"/> | |
| 138 | + </constraints> | |
| 139 | + <state key="normal" title="VMAP"> | |
| 140 | + <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/> | |
| 141 | + </state> | |
| 142 | + <userDefinedRuntimeAttributes> | |
| 143 | + <userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius"> | |
| 144 | + <integer key="value" value="10"/> | |
| 145 | + </userDefinedRuntimeAttribute> | |
| 146 | + </userDefinedRuntimeAttributes> | |
| 147 | + </button> | |
| 148 | + </subviews> | |
| 149 | + <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> | |
| 150 | + <constraints> | |
| 151 | + <constraint firstItem="P1r-ft-imP" firstAttribute="leading" secondItem="SNe-1B-nwV" secondAttribute="leading" constant="8" id="PCO-gJ-aUC"/> | |
| 152 | + <constraint firstItem="P1r-ft-imP" firstAttribute="top" secondItem="hyY-rU-WJx" secondAttribute="bottom" constant="8" id="TFE-rm-YuC"/> | |
| 153 | + <constraint firstItem="hyY-rU-WJx" firstAttribute="leading" secondItem="SNe-1B-nwV" secondAttribute="leading" constant="8" id="Urc-sV-0AF"/> | |
| 154 | + <constraint firstAttribute="bottom" secondItem="P1r-ft-imP" secondAttribute="bottom" constant="8" id="YYl-bN-XH2"/> | |
| 155 | + <constraint firstItem="hyY-rU-WJx" firstAttribute="top" secondItem="SNe-1B-nwV" secondAttribute="top" constant="8" id="a68-ja-X4x"/> | |
| 156 | + <constraint firstAttribute="trailing" secondItem="fXA-Zh-ABB" secondAttribute="trailing" constant="8" id="hNz-cE-JQc"/> | |
| 157 | + <constraint firstAttribute="trailing" secondItem="hyY-rU-WJx" secondAttribute="trailing" constant="8" id="tHp-Xw-Emj"/> | |
| 158 | + <constraint firstAttribute="bottom" secondItem="fXA-Zh-ABB" secondAttribute="bottom" constant="8" id="vRs-Al-kct"/> | |
| 159 | + </constraints> | |
| 160 | + </view> | |
| 161 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ftA-wa-19F"> | |
| 162 | + <rect key="frame" x="15" y="218" width="345" height="100"/> | |
| 163 | + <constraints> | |
| 164 | + <constraint firstAttribute="height" constant="100" id="sns-tn-c0d"/> | |
| 165 | + </constraints> | |
| 166 | + <fontDescription key="fontDescription" type="system" pointSize="17"/> | |
| 167 | + <nil key="textColor"/> | |
| 168 | + <nil key="highlightedColor"/> | |
| 169 | + </label> | |
| 170 | + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="eBu-7L-nsx" customClass="AutoTransButton"> | |
| 171 | + <rect key="frame" x="194" y="328" width="166" height="30"/> | |
| 172 | + <color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/> | |
| 173 | + <constraints> | |
| 174 | + <constraint firstAttribute="width" constant="166" id="Rrn-lf-raV"/> | |
| 175 | + <constraint firstAttribute="height" constant="30" id="y2E-RH-aan"/> | |
| 176 | + </constraints> | |
| 177 | + <state key="normal" title="ใกใณใใผ"> | |
| 178 | + <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/> | |
| 179 | + </state> | |
| 180 | + <userDefinedRuntimeAttributes> | |
| 181 | + <userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius"> | |
| 182 | + <integer key="value" value="10"/> | |
| 183 | + </userDefinedRuntimeAttribute> | |
| 184 | + </userDefinedRuntimeAttributes> | |
| 185 | + <connections> | |
| 186 | + <action selector="clickSwitch:" destination="-1" eventType="touchUpInside" id="B7a-Hl-IlY"/> | |
| 187 | + </connections> | |
| 188 | + </button> | |
| 189 | + <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" style="plain" separatorStyle="none" rowHeight="100" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="ubS-v9-zCa"> | |
| 190 | + <rect key="frame" x="0.0" y="373" width="375" height="244"/> | |
| 191 | + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> | |
| 192 | + <connections> | |
| 193 | + <outlet property="dataSource" destination="-1" id="HIG-w5-mXN"/> | |
| 194 | + <outlet property="delegate" destination="-1" id="GIa-bX-Av9"/> | |
| 195 | + </connections> | |
| 196 | + </tableView> | |
| 197 | + <tableView hidden="YES" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" style="plain" separatorStyle="default" rowHeight="35" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="dtD-J5-dze"> | |
| 198 | + <rect key="frame" x="15" y="91" width="345" height="140"/> | |
| 199 | + <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> | |
| 200 | + <constraints> | |
| 201 | + <constraint firstAttribute="height" constant="140" id="CrG-Ni-f6b"/> | |
| 202 | + </constraints> | |
| 203 | + <connections> | |
| 204 | + <outlet property="dataSource" destination="-1" id="2bH-mm-vKH"/> | |
| 205 | + <outlet property="delegate" destination="-1" id="9tr-mh-5Ir"/> | |
| 206 | + </connections> | |
| 207 | + </tableView> | |
| 208 | + </subviews> | |
| 209 | + <color key="backgroundColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/> | |
| 210 | + <constraints> | |
| 211 | + <constraint firstItem="ftA-wa-19F" firstAttribute="top" secondItem="SNe-1B-nwV" secondAttribute="bottom" constant="8" id="4iN-BW-Eaa"/> | |
| 212 | + <constraint firstItem="vxT-xe-7mV" firstAttribute="top" secondItem="i5M-Pr-FkT" secondAttribute="top" id="5np-jI-7iK"/> | |
| 213 | + <constraint firstAttribute="trailing" secondItem="eBu-7L-nsx" secondAttribute="trailing" constant="15" id="AkN-Cv-ULu"/> | |
| 214 | + <constraint firstItem="SNe-1B-nwV" firstAttribute="top" secondItem="hhh-nO-yn5" secondAttribute="bottom" constant="15" id="BL0-Cv-jlz"/> | |
| 215 | + <constraint firstItem="ubS-v9-zCa" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" id="Dt8-xl-lI8"/> | |
| 216 | + <constraint firstAttribute="trailing" secondItem="SNe-1B-nwV" secondAttribute="trailing" constant="15" id="QiL-ts-ryc"/> | |
| 217 | + <constraint firstItem="dtD-J5-dze" firstAttribute="top" secondItem="hhh-nO-yn5" secondAttribute="bottom" constant="1" id="QzJ-aS-NQ0"/> | |
| 218 | + <constraint firstItem="SNe-1B-nwV" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" constant="15" id="T4b-fq-Gc8"/> | |
| 219 | + <constraint firstAttribute="trailing" secondItem="hhh-nO-yn5" secondAttribute="trailing" constant="15" id="YB3-2b-4yx"/> | |
| 220 | + <constraint firstAttribute="bottom" secondItem="ubS-v9-zCa" secondAttribute="bottom" constant="50" id="ZNH-0B-rWz"/> | |
| 221 | + <constraint firstItem="ftA-wa-19F" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" constant="15" id="bnx-K2-jVS"/> | |
| 222 | + <constraint firstAttribute="trailing" secondItem="ubS-v9-zCa" secondAttribute="trailing" id="bsK-wi-RYU"/> | |
| 223 | + <constraint firstAttribute="trailing" secondItem="vxT-xe-7mV" secondAttribute="trailing" id="eld-fc-V95"/> | |
| 224 | + <constraint firstItem="hhh-nO-yn5" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" constant="15" id="gDN-Hr-2vm"/> | |
| 225 | + <constraint firstItem="vxT-xe-7mV" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" id="iBy-99-6Ky"/> | |
| 226 | + <constraint firstItem="dtD-J5-dze" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" constant="15" id="ie5-ll-WkY"/> | |
| 227 | + <constraint firstAttribute="trailing" secondItem="ftA-wa-19F" secondAttribute="trailing" constant="15" id="jaz-L9-glj"/> | |
| 228 | + <constraint firstItem="eBu-7L-nsx" firstAttribute="top" secondItem="ftA-wa-19F" secondAttribute="bottom" constant="10" id="lF2-iL-Xa6"/> | |
| 229 | + <constraint firstItem="ubS-v9-zCa" firstAttribute="top" secondItem="eBu-7L-nsx" secondAttribute="bottom" constant="15" id="ofF-9P-pq9"/> | |
| 230 | + <constraint firstItem="hhh-nO-yn5" firstAttribute="top" secondItem="vxT-xe-7mV" secondAttribute="bottom" constant="8" id="qIL-RX-3zl"/> | |
| 231 | + <constraint firstAttribute="trailing" secondItem="dtD-J5-dze" secondAttribute="trailing" constant="15" id="uHa-ot-bT0"/> | |
| 232 | + </constraints> | |
| 233 | + <point key="canvasLocation" x="24.5" y="52.5"/> | |
| 234 | + </view> | |
| 235 | + </objects> | |
| 236 | + <resources> | |
| 237 | + <image name="arrow_down" width="28" height="18"/> | |
| 238 | + <image name="icon_menu" width="30" height="30"/> | |
| 239 | + <image name="today_back_button" width="73" height="37"/> | |
| 240 | + </resources> | |
| 241 | +</document> |
LifeLog/LifeLog/SNSViewController.m
| ... | ... | @@ -14,6 +14,7 @@ |
| 14 | 14 | #import "Utilities.h" |
| 15 | 15 | |
| 16 | 16 | #import "SNSRecentTopicTableViewCell.h" |
| 17 | +#import "MyGroupViewController.h" | |
| 17 | 18 | #import "SearchGroupViewController.h" |
| 18 | 19 | #import "GroupDetailViewController.h" |
| 19 | 20 | |
| ... | ... | @@ -46,8 +47,8 @@ |
| 46 | 47 | } |
| 47 | 48 | |
| 48 | 49 | - (IBAction)clickMyGroup:(id)sender { |
| 49 | -// GroupDetailViewController * detail = [[GroupDetailViewController alloc] init]; | |
| 50 | -// [self.navigationController pushViewController:detail animated:true]; | |
| 50 | + MyGroupViewController * myGrp = [[MyGroupViewController alloc] init]; | |
| 51 | + [self.navigationController pushViewController:myGrp animated:true]; | |
| 51 | 52 | } |
| 52 | 53 | |
| 53 | 54 | #pragma mark UITableView Delegate |
LifeLog/LifeLog/ServerAPI.h
| ... | ... | @@ -35,6 +35,7 @@ |
| 35 | 35 | - (void) requestHistoryList:(NSString *)token withType:(int)type andMode:(int) mode AtPage:(int) page CompletionHandler:(void (^)(NSArray *, NSError *)) completion; |
| 36 | 36 | - (void) requestJoinGroup:(NSString *)token groupID: (int) groupID CompletionHandler:(void (^)(NSError *)) completion; |
| 37 | 37 | -(void) requestCreateGroup:(NSString *)token withGroup:(GroupObject *)group CompletionHandler:(void (^)(GroupObject *, NSError *)) completion; |
| 38 | +- (void) requestGroupList:(NSString *)token CompletionHandler:(void (^)(NSArray *, NSError *)) completion; | |
| 38 | 39 | |
| 39 | 40 | #pragma mark - SNS Screen Function |
| 40 | 41 | /* |
LifeLog/LifeLog/ServerAPI.m
| ... | ... | @@ -814,8 +814,7 @@ |
| 814 | 814 | NSString *url = [kServerAddress stringByAppendingFormat:@"api/sns/group/join"]; |
| 815 | 815 | NSLog(@"requestJoinGroup link %@", url); |
| 816 | 816 | |
| 817 | - searchTask = [self _request:url method:@"POST" token:token paras:@{@"group_id": [NSNumber numberWithInt:groupID]} completion:^(NSData *data, NSError *error) { | |
| 818 | - searchTask = nil; | |
| 817 | + [self _request:url method:@"POST" token:token paras:@{@"group_id": [NSNumber numberWithInt:groupID]} completion:^(NSData *data, NSError *error) { | |
| 819 | 818 | if (completion == NULL) { |
| 820 | 819 | return ; |
| 821 | 820 | } |
| ... | ... | @@ -854,6 +853,58 @@ |
| 854 | 853 | }]; |
| 855 | 854 | } |
| 856 | 855 | |
| 856 | +- (void) requestGroupList:(NSString *)token CompletionHandler:(void (^)(NSArray *, NSError *)) completion { | |
| 857 | + NSString *url = [kServerAddress stringByAppendingFormat:@"api/groups/list"]; | |
| 858 | + NSLog(@"requestGroupList link %@", url); | |
| 859 | + | |
| 860 | + [self _request:url method:@"GET" token:token paras:nil completion:^(NSData *data, NSError *error) { | |
| 861 | + if (completion == NULL) { | |
| 862 | + return ; | |
| 863 | + } | |
| 864 | + | |
| 865 | + if (error == nil) | |
| 866 | + { | |
| 867 | + NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error]; | |
| 868 | + NSLog(@"%@", dataResult); | |
| 869 | + int status = [dataResult[@"status"] intValue]; | |
| 870 | + if (status == 1) { // status = 1 success | |
| 871 | + if(dataResult[@"result"] != nil) { | |
| 872 | + NSArray * array = dataResult[@"result"]; | |
| 873 | + NSMutableArray * arrayGroup = [[NSMutableArray alloc] init]; | |
| 874 | + for(NSDictionary * dict in array) { | |
| 875 | + GroupObject * object = [[GroupObject alloc] initWithShortData:dict]; | |
| 876 | + [arrayGroup addObject:object]; | |
| 877 | + } | |
| 878 | + completion(arrayGroup, nil); | |
| 879 | + } | |
| 880 | + else { | |
| 881 | + NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}]; | |
| 882 | + completion(nil, errorObject); | |
| 883 | + } | |
| 884 | + } | |
| 885 | + else { | |
| 886 | + NSString *message = dataResult[@"message"]; | |
| 887 | + if (message == nil) { | |
| 888 | + message = @"Unknown error"; | |
| 889 | + } | |
| 890 | + | |
| 891 | + if ([message isEqualToString:@"Token is invalid"]) { | |
| 892 | + [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES]; | |
| 893 | + NSString *tokenNew = [[NSUserDefaults standardUserDefaults] objectForKey:kToken]; | |
| 894 | + [self requestGroupList:tokenNew CompletionHandler:completion]; | |
| 895 | + } | |
| 896 | + else { | |
| 897 | + NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}]; | |
| 898 | + completion(nil, errorObject); | |
| 899 | + } | |
| 900 | + } | |
| 901 | + } | |
| 902 | + else | |
| 903 | + { | |
| 904 | + completion(nil, error); | |
| 905 | + } | |
| 906 | + }]; | |
| 907 | +} | |
| 857 | 908 | #pragma mark - Common API |
| 858 | 909 | - (void)refreshToken: (NSString *)userID CompletionHandler:(void (^)(NSString *, NSError *))completion { |
| 859 | 910 | [self _request:[kServerAddress stringByAppendingFormat: @"refreshToken"] method:@"POST" token:@"" paras:@{@"userId":userID} completion:^(NSData *data, NSError *error) { |