// // XPMineUserDataViewController.m // xplan-ios // // Created by 冯硕 on 2022/4/14. // #import "XPMineUserDataViewController.h" ///Third #import ///Tool #import "AccountInfoStorage.h" #import "XPMonentsLayoutConfig.h" ///View #import "XPMineDataClanTableViewCell.h" #import "XPMineDataGiftTableViewCell.h" #import "XPMonentsTableViewCell.h" #import "XPMonentsEmptyTableViewCell.h" ///Model #import "ClanDetailInfoModel.h" #import "UserInfoModel.h" #import "MineSkillCardListInfoModel.h" ///P #import "XPMineUserDataPresenter.h" #import "XPMineUserDataProtocol.h" #import "XPMonentsMineProtocol.h" ///View #import "XPMineUserInfoGiftWallViewController.h" #import "XPMineClanViewController.h" #import "XPMineGuildViewController.h" #import "XPMonentsDetailViewController.h" #import "XPMineUserInfoAlbumViewController.h" #import "XPMineDataGiftTableViewCell.h" #import "XPMineAlbumTableViewCell.h" #import "XPMineMedalsTableViewCell.h" #import "XPMineGiftsTableViewCell.h" #import "MedalModel.h" typedef enum : NSUInteger { Album = 0, Medal = 1, Gifts = 2, LuckyGifts = 3, SectionTypeCount = 4 } MineUserInfoPageSectionType; @interface XPMineUserSectionHeader : UIView @property (nonatomic, copy) NSString *title; @property (nonatomic, copy) NSString *num; @property (nonatomic, assign) BOOL hasMore; @property (nonatomic, copy) void(^didTapMore)(void); @property (nonatomic, strong) UILabel *titleLabel; @property (nonatomic, strong) UILabel *numLabel; @property (nonatomic, strong) UIButton *arrowButton; @end @implementation XPMineUserSectionHeader - (instancetype)init { if (self = [super init]) { self.frame = CGRectMake(0, 0, KScreenWidth, 20); _titleLabel = [UILabel labelInitWithText:@"" font:[UIFont systemFontOfSize:16 weight:UIFontWeightBold] textColor:UIColorFromRGB(0x191919)]; [self addSubview:_titleLabel]; [_titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.centerY.mas_equalTo(self); if (isMSRTL()) { make.right.mas_equalTo(self).offset(0); } else { make.left.mas_equalTo(self).offset(0); } }]; _numLabel = [UILabel labelInitWithText:@"" font:[UIFont systemFontOfSize:16 weight:UIFontWeightBold] textColor:UIColorFromRGB(0x666666)]; [self addSubview:_numLabel]; [_numLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.centerY.mas_equalTo(self); if (isMSRTL()) { make.right.mas_equalTo(self.titleLabel.mas_left).offset(-4); } else { make.left.mas_equalTo(self.titleLabel.mas_right).offset(4); } }]; _arrowButton = [UIButton buttonWithType:UIButtonTypeCustom]; if (isMSRTL()) { _arrowButton.semanticContentAttribute = UISemanticContentAttributeForceRightToLeft; } if (isMSRTL()) { [_arrowButton setBackgroundImage:[[UIImage imageNamed:@"skillCard_arrow"] ms_SetImageForRTL] forState:UIControlStateNormal]; } else { [_arrowButton setBackgroundImage:[UIImage imageNamed:@"skillCard_arrow"] forState:UIControlStateNormal]; } [_arrowButton addTarget:self action:@selector(didTapArrowButton) forControlEvents:UIControlEventTouchUpInside]; [_arrowButton setEnlargeEdgeWithTop:5 right:10 bottom:10 left:10]; [self addSubview:_arrowButton]; [_arrowButton mas_makeConstraints:^(MASConstraintMaker *make) { make.centerY.mas_equalTo(self); make.size.mas_equalTo(CGSizeMake(20, 20)); if (isMSRTL()) { make.left.mas_equalTo(self).offset(0); } else { make.right.mas_equalTo(self).offset(0); } }]; } return self; } - (void)setTitle:(NSString *)title { _titleLabel.text = title; } - (void)setNum:(NSString *)num { _numLabel.text = num; } - (void)setHasMore:(BOOL)hasMore { _arrowButton.hidden = !hasMore; } - (void)didTapArrowButton { if (self.didTapMore) { self.didTapMore(); } } @end @interface XPMineUserDataViewController () ///列表 @property (nonatomic,strong) UITableView *tableView; ///家族信息 @property (nonatomic,strong) ClanDetailInfoModel *clanDetailInfo; ///是否折叠 @property (nonatomic,assign) BOOL isFold; @property (nonatomic,assign) BOOL isGiftsSectionExpand; @property (nonatomic,assign) BOOL isLuckyGiftsSectionExpand; @property (nonatomic, copy) void(^scrollCallback)(UIScrollView *scrollView); ///是否展示加入家族房间 @property (nonatomic,assign) BOOL isShowEnterClan; ///数据源 @property (nonatomic,strong) NSMutableArray *datasource; //@property (nonatomic,strong) UIView *headView; @property (nonatomic, strong) UIButton *giftsExpandButton; @property (nonatomic, strong) UIButton *luckyGiftsExpandButton; /// @property (nonatomic,assign) BOOL isOpen; @property (nonatomic, strong) XPMineUserSectionHeader *albumHeader; @property (nonatomic, strong) XPMineUserSectionHeader *medalHeader; @property (nonatomic, strong) XPMineUserSectionHeader *giftsHeader; @property (nonatomic, strong) XPMineUserSectionHeader *luckyGiftsHeader; @end @implementation XPMineUserDataViewController - (BOOL)isHiddenNavBar { return YES; } - (__kindof id)createPresenter { return [[XPMineUserDataPresenter alloc] init]; } - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor whiteColor]; // [self initHttpRequest]; [self initSubViews]; [self initSubViewConstraints]; } #pragma mark - Http - (void)initHttpRequest { self.isOpen = self.userUid.integerValue == [[AccountInfoStorage instance]getUid].integerValue; self.isFold = YES; self.isShowEnterClan = NO; [self.presenter getClanDetailInfo:self.userUid currentUserUid:[AccountInfoStorage instance].getUid]; } #pragma mark - Private Method - (void)initSubViews { [self.view addSubview:self.tableView]; } - (void)initSubViewConstraints { [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.mas_equalTo(self.view).offset(14); make.bottom.mas_equalTo(self.view).offset(-14); make.left.mas_equalTo(self.view).offset(14); make.right.mas_equalTo(self.view).offset(-14); }]; } - (void)didTapGiftsSectionFoldButton { self.isGiftsSectionExpand = !self.isGiftsSectionExpand; self.giftsExpandButton.transform = self.isGiftsSectionExpand ? CGAffineTransformMakeRotation(M_PI) : CGAffineTransformIdentity; [self.tableView reloadData]; } - (void)didTapLuckyGiftsSectionFoldButton { self.isLuckyGiftsSectionExpand = !self.isLuckyGiftsSectionExpand; self.luckyGiftsExpandButton.transform = self.isLuckyGiftsSectionExpand ? CGAffineTransformMakeRotation(M_PI) : CGAffineTransformIdentity; [self.tableView reloadData]; } #pragma mark - UITableViewDelegate And UITableViewDataSource - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return SectionTypeCount; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { switch (section) { case Album: return 1; break; case Medal: return self.medalInfo.medalCount == 0 ? 0 : 1; break; case Gifts: return 1; break; case LuckyGifts: return 1; break; default: return 0; break; } } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { switch (indexPath.section) { case Album: return 90; break; case Medal: return 70; break; case Gifts: return [XPMineGiftsTableViewCell cellHeight:self.isGiftsSectionExpand source:self.giftWall]; break; case LuckyGifts: return [XPMineGiftsTableViewCell cellHeight:self.isLuckyGiftsSectionExpand source:self.luckyGiftWall]; break; default: return 0; break; } return KScreenHeight - kNavigationHeight - 49 - kSafeAreaBottomHeight; } - (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{ switch (section) { case Album: return nil; break; case Medal: return nil; break; case Gifts: return self.giftWall.count > 4 ? self.giftsExpandButton : nil; break; case LuckyGifts: return self.luckyGiftWall.count > 4 ? self.luckyGiftsExpandButton : nil; break; default: return 0; break; } } - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{ switch (section) { case Album: return 0; break; case Medal: return 0; break; case Gifts: return self.giftWall.count > 4 ? 20 : 0; break; case LuckyGifts: return self.luckyGiftWall.count > 4 ? 20 : 0; break; default: return 0; break; } } -(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{ if (section == Medal) { return self.medalInfo.medalCount == 0 ? 0 : 30; } else if (section == Gifts || section == LuckyGifts) { return 50; } return 30; } - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{ switch (section) { case Album: return self.albumHeader; break; case Medal: return self.medalInfo.medalCount == 0 ? [UIView new] : self.medalHeader; break; case Gifts: return self.giftsHeader; break; case LuckyGifts: return self.luckyGiftsHeader; break; default: return [UIView new]; break; } } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { switch (indexPath.section) { case Album: { XPMineAlbumTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMineAlbumTableViewCell class]) forIndexPath:indexPath]; cell.albumDataSource = self.userInfo.privatePhoto; return cell; } break; case Medal: { XPMineMedalsTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMineMedalsTableViewCell class]) forIndexPath:indexPath]; cell.medalsDataSource = self.medalInfo.userMedals; return cell; } break; case Gifts:{ XPMineGiftsTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMineGiftsTableViewCell class])]; cell.giftsDataSource = self.giftWall; cell.isLucky = NO; return cell; } break; case LuckyGifts:{ XPMineGiftsTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMineGiftsTableViewCell class])]; cell.giftsDataSource = self.luckyGiftWall; cell.isLucky = YES; return cell; } break; default: return [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMonentsEmptyTableViewCell class])]; break; } } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { if(indexPath.section == 0)return; [tableView deselectRowAtIndexPath:indexPath animated:YES]; if (self.datasource.count > 0) { XPMonentsDetailViewController * detailVC = [[XPMonentsDetailViewController alloc] init]; MonentsInfoModel * monentsInfo = [self.datasource xpSafeObjectAtIndex:indexPath.row]; if(monentsInfo.dynamicId == nil){ return; } detailVC.monentsInfo = monentsInfo; detailVC.delegate = self; [self.navigationController pushViewController:detailVC animated:YES]; } } #pragma mark - XPMonentsTableViewCellDelegate - (void)xPMonentsTableViewCell:(XPMonentsTableViewCell *)view didClickLike:(MonentsInfoModel *)monentsInfo { if(monentsInfo.dynamicId == nil){ [self showErrorToast:YMLocalizedString(@"XPMineUserDataViewController2")]; return; } [self.presenter likeMonent:monentsInfo.dynamicId status:!monentsInfo.isLike likedUid:monentsInfo.uid worldId:[NSString stringWithFormat:@"%ld", monentsInfo.worldId]]; } - (void)xPMonentsTableViewCell:(XPMonentsTableViewCell *)view didClicCommon:(MonentsInfoModel *)monentsInfo{ if(monentsInfo.dynamicId == nil){ [self showErrorToast:YMLocalizedString(@"XPMineUserDataViewController3")]; return; } XPMonentsDetailViewController * detailVC = [[XPMonentsDetailViewController alloc] init]; detailVC.monentsInfo = monentsInfo; detailVC.delegate = self; [self.navigationController pushViewController:detailVC animated:YES]; } - (void)xPMonentsTableViewCell:(XPMonentsTableViewCell *)view didClicDelete:(MonentsInfoModel *)monentsInfo { [TTPopup alertWithMessage:YMLocalizedString(@"XPMonentsMineViewController0") confirmHandler:^{ [self.presenter deleteMonents:monentsInfo.dynamicId worldId:[NSString stringWithFormat:@"%ld", monentsInfo.worldId]]; } cancelHandler:^{ }]; } - (void)xPMonentsTableViewCell:(XPMonentsTableViewCell *)view didClicShielding:(nonnull MonentsInfoModel *)monentsInfo{ [self showLoading]; [self.presenter requesstShieldingWtihType:@"0" objId:monentsInfo.dynamicId]; } - (void)xPMonentsTableViewCell:(XPMonentsTableViewCell *)view didClicFold:(MonentsInfoModel *)monentsInfo { __block MonentsInfoModel * monentsInfos; [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { if (obj.dynamicId.integerValue == monentsInfo.dynamicId.integerValue) { monentsInfos = obj; *stop = YES; } }]; if (monentsInfos) { NSInteger section = [self.datasource indexOfObject:monentsInfo]; [self.tableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:section inSection:1]] withRowAnimation:UITableViewRowAnimationNone]; } } #pragma mark - XPMonentsDetailViewControllerDelegate - (void)xPMonentsDetailViewController:(XPMonentsDetailViewController *)view deleteMonents:(NSString *)dynamicId { __block MonentsInfoModel * deleteInfo; [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { if (obj.dynamicId.integerValue == dynamicId.integerValue) { deleteInfo = obj; } }]; if (deleteInfo) { [self.datasource removeObject:deleteInfo]; [self.tableView reloadData]; } } #pragma mark - XPMonentsMineProtocol - (void)requesstShieldingSuccess:(NSString *)monentsInfo{ [self hideHUD]; [self showSuccessToast:YMLocalizedString(@"XPMonentsMineViewController2")]; __block MonentsInfoModel * deleteInfo; [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { if (obj.dynamicId.integerValue == monentsInfo.integerValue) { deleteInfo = obj; } }]; if (deleteInfo) { [self.datasource removeObject:deleteInfo]; [self.tableView reloadData]; } } - (void)likeMonentsSuccess:(NSString *)dynamicId status:(BOOL)status { [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { if ([obj.dynamicId isEqualToString:dynamicId]) { NSInteger likeCount = obj.likeCount.integerValue; if (status) { likeCount += 1; obj.isLike += 1; } else { likeCount -= 1; obj.isLike -= 1; } obj.likeCount = @(likeCount).stringValue; *stop = YES; } }]; [self.tableView reloadData]; } - (void)deleteMonentsSuccess:(NSString *)monentsInfo { [self showSuccessToast:YMLocalizedString(@"XPMonentsMineViewController1")]; __block MonentsInfoModel * deleteInfo; [self.datasource enumerateObjectsUsingBlock:^(MonentsInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { if (obj.dynamicId.integerValue == monentsInfo.integerValue) { deleteInfo = obj; } }]; if (deleteInfo) { [self.datasource removeObject:deleteInfo]; [self.tableView reloadData]; } } #pragma mark - XPMineDataClanTableViewCellDelegate - (void)xPMineDataClanTableViewCell:(XPMineDataClanTableViewCell *)view didClickFold:(UIButton *)sender { self.isFold = !sender.selected; [self.tableView reloadData]; // [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationNone]; } - (void)xPMineDataClanTableViewCell:(XPMineDataClanTableViewCell *)view didClickOpen:(ClanDetailInfoModel *)clanInfo{ self.isOpen = YES; [self.tableView reloadData]; } - (void)xPMineDataClanTableViewCell:(XPMineDataClanTableViewCell *)view didClickEnter:(ClanDetailInfoModel *)clanInfo { [self.presenter memberApplyHall:clanInfo.hall.hallId]; } - (void)xPMineDataClanTableViewCell:(XPMineDataClanTableViewCell *)view didClickClanView:(ClanDetailInfoModel *)clanInfo { XPMineClanViewController * clanVC = [[XPMineClanViewController alloc] init]; clanVC.uid = self.clanDetailInfo.clan.elderUid; [self.navigationController pushViewController:clanVC animated:YES]; } - (void)xPMineDataClanTableViewCell:(XPMineDataClanTableViewCell *)view didClickHallView:(ClanDetailInfoModel *)clanInfo { XPMineGuildViewController * hallVC = [[XPMineGuildViewController alloc] init]; hallVC.ownerUid = clanInfo.hall.ownerUid; hallVC.guildId = clanInfo.hall.hallId; [self.navigationController pushViewController:hallVC animated:YES]; } #pragma mark - XPMineDataGiftTableViewCellDelegate - (void)xPMineDataGiftTableViewCell:(XPMineDataGiftTableViewCell *)view didClickMore:(UIButton *)sender { XPMineUserInfoGiftWallViewController * giftWallVC = [[XPMineUserInfoGiftWallViewController alloc] init]; giftWallVC.userUid = self.userUid; [self.navigationController pushViewController:giftWallVC animated:YES]; } #pragma mark - JXPagingViewListViewDelegate - (UIView *)listView { return self.view; } - (UIScrollView *)listScrollView { return self.tableView; } - (void)listViewDidScrollCallback:(void (^)(UIScrollView *))callback { self.scrollCallback = callback; } - (void)scrollViewDidScroll:(UIScrollView *)scrollView { self.scrollCallback(scrollView); } #pragma mark - XPMineUserDataProtocol - (void)getClanDetailInfoSuccess:(ClanDetailInfoModel *)clanDetailInfo currentUserClanInfo:(ClanDetailInfoModel *)currentUserClanInfo { self.clanDetailInfo = clanDetailInfo; if (clanDetailInfo.hall.hallName.length > 0 && currentUserClanInfo.hall.hallName.length <= 0 && ![[AccountInfoStorage instance].getUid isEqualToString:self.userUid]) { self.isShowEnterClan = YES; } else { self.isShowEnterClan = NO; } [self.tableView reloadData]; // [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationNone]; } - (void)memberApplyHallSuccess { [self showSuccessToast:YMLocalizedString(@"XPMineUserDataViewController0")]; } #pragma mark - Getters And Setters - (void)setUserInfo:(UserInfoModel *)userInfo { _userInfo = userInfo; self.albumHeader.num = [NSString stringWithFormat:@"(%ld)", (long)userInfo.privatePhoto.count]; [self.tableView reloadData]; if (userInfo.uid != [[AccountInfoStorage instance].getUid integerValue]) { self.albumHeader.hasMore = NO; } } - (void)setDynamicInfo:(NSArray *)dynamicInfo { [self.datasource removeAllObjects]; [self.datasource addObjectsFromArray:dynamicInfo]; [self.tableView reloadData]; } - (void)setMedalInfo:(MedalModel *)medalInfo { _medalInfo = medalInfo; self.medalHeader.num = [NSString stringWithFormat:@"(%ld)", (long)medalInfo.medalCount]; [self.tableView reloadData]; } - (UITableView *)tableView { if (!_tableView) { _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped]; _tableView.delegate = self; _tableView.dataSource = self; _tableView.separatorStyle = UITableViewCellSeparatorStyleNone; _tableView.backgroundColor = [UIColor whiteColor]; if (@available(iOS 11.0, *)) { _tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; } [_tableView registerClass:[XPMineAlbumTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMineAlbumTableViewCell class])]; [_tableView registerClass:[XPMineMedalsTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMineMedalsTableViewCell class])]; [_tableView registerClass:[XPMineGiftsTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMineGiftsTableViewCell class])]; [_tableView registerClass:[XPMonentsEmptyTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMonentsEmptyTableViewCell class])]; [_tableView registerClass:[XPMonentsTableViewCell class] forCellReuseIdentifier:@"XPMonentsDynamicTableViewCell"]; [_tableView registerClass:[XPMineDataClanTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMineDataClanTableViewCell class])]; [_tableView registerClass:[XPMineDataGiftTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMineDataGiftTableViewCell class])]; if (isMSRTL()) { _tableView.semanticContentAttribute = UISemanticContentAttributeForceRightToLeft; } } return _tableView; } - (NSMutableArray *)datasource { if (!_datasource) { _datasource = [NSMutableArray array]; } return _datasource; } - (XPMineUserSectionHeader *)albumHeader { if (!_albumHeader) { _albumHeader = [[XPMineUserSectionHeader alloc] init]; _albumHeader.title = YMLocalizedString(@"QinputPhotoView1"); _albumHeader.hasMore = YES; @kWeakify(self); _albumHeader.didTapMore = ^{ @kStrongify(self); XPMineUserInfoAlbumViewController * albumVC = [[XPMineUserInfoAlbumViewController alloc] init]; [self.navigationController pushViewController:albumVC animated:YES]; }; } return _albumHeader; } - (XPMineUserSectionHeader *)medalHeader { if (!_medalHeader) { _medalHeader = [[XPMineUserSectionHeader alloc] init]; _medalHeader.title = YMLocalizedString(@"XPMineDataGiftTableViewCell2"); _medalHeader.num = @"(0)"; _medalHeader.hasMore = NO; } return _medalHeader; } - (XPMineUserSectionHeader *)giftsHeader { if (!_giftsHeader) { _giftsHeader = [[XPMineUserSectionHeader alloc] init]; _giftsHeader.title = YMLocalizedString(@"XPMineDataGiftTableViewCell0"); _giftsHeader.hasMore = NO; } return _giftsHeader; } - (XPMineUserSectionHeader *)luckyGiftsHeader { if (!_luckyGiftsHeader) { _luckyGiftsHeader = [[XPMineUserSectionHeader alloc] init]; _luckyGiftsHeader.title = YMLocalizedString(@"XPMineDataGiftTableViewCell1"); _luckyGiftsHeader.hasMore = NO; } return _luckyGiftsHeader; } - (UIButton *)giftsExpandButton { if (!_giftsExpandButton) { _giftsExpandButton = [UIButton buttonWithType:UIButtonTypeCustom]; [_giftsExpandButton setImage:[UIImage imageNamed:@"common_down_arrow"] forState:UIControlStateNormal]; [_giftsExpandButton addTarget:self action:@selector(didTapGiftsSectionFoldButton) forControlEvents:UIControlEventTouchUpInside]; _giftsExpandButton.selected = YES; [_giftsExpandButton setEnlargeEdgeWithTop:5 right:10 bottom:10 left:10]; } return _giftsExpandButton; } - (UIButton *)luckyGiftsExpandButton { if (!_luckyGiftsExpandButton) { _luckyGiftsExpandButton = [UIButton buttonWithType:UIButtonTypeCustom]; [_luckyGiftsExpandButton setImage:[UIImage imageNamed:@"common_down_arrow"] forState:UIControlStateNormal]; [_luckyGiftsExpandButton addTarget:self action:@selector(didTapLuckyGiftsSectionFoldButton) forControlEvents:UIControlEventTouchUpInside]; _luckyGiftsExpandButton.selected = YES; [_luckyGiftsExpandButton setEnlargeEdgeWithTop:5 right:10 bottom:10 left:10]; } return _luckyGiftsExpandButton; } @end