This commit is contained in:
启星
2025-11-28 22:43:06 +08:00
parent 8913ea6f48
commit 7eb4f8d3b8
197 changed files with 7315 additions and 666 deletions

View File

@@ -36,6 +36,8 @@
#import "QXRoomSingerAuthViewController.h"
#import "QXMineSongListViewController.h"
#import "QXIntimateViewController.h"
#import "QXBodyPriceRuleView.h"
#import "QXFamilyViewController.h"
#import <WXApi.h>
@interface QXMineViewController ()<UITableViewDelegate,UITableViewDataSource,QXMineServiceCellDelegate,QXMainHeaderViewDelegate>
@@ -127,6 +129,12 @@
[self gotoSetting];
}
break;
case QXMineServiceTypeFamily:{
QXLOG(@"跳转家族");
QXFamilyViewController *vc = [[QXFamilyViewController alloc] init];
[self.navigationController pushViewController:vc animated:YES];
}
break;
case QXMineServiceTypeHelp:{
[self gotoService];
}
@@ -223,6 +231,10 @@
[self.navigationController pushViewController:vc animated:YES];
}
break;
case QXMainHeaderOptionTypeBodyPrice:{
[QXBodyPriceRuleView showInView:self.view];
}
break;
case QXMainHeaderOptionTypeWallet:{
QXLOG(@"跳转钱包");
BOOL result = [[NSUserDefaults standardUserDefaults] boolForKey:kWalletRuleHide];
@@ -304,7 +316,7 @@
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
if (indexPath.row == 0) {
return ScaleWidth(110);
return ScaleWidth(168);
}else{
// if (QXGlobal.shareGlobal.isOpenRecharge) {
return ScaleWidth(168);

View File

@@ -41,6 +41,7 @@
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:NO animated:YES];
[self.headerView headerStartPlay];
}
-(void)setNavgationItems{
[super setNavgationItems];
@@ -91,7 +92,9 @@
_pagingView.mainTableView.backgroundColor = [UIColor clearColor];
self.pagingView.backgroundColor = [UIColor clearColor];
[self.view addSubview:self.pagingView];
self.cycleScrollView.hidden = YES;
self.backgourdImageView.hidden = YES;
self.categoryView.hidden = YES;
self.categoryView.listContainer = (id<JXCategoryViewListContainer>)self.pagingView.listContainerView;
// self.navigationController.interactivePopGestureRecognizer.enabled = (self.categoryView.selectedIndex == 0);
@@ -120,6 +123,9 @@
weakSelf.headerView.height = 243+ScaleWidth(40)+8;
}
[weakSelf.pagingView resizeTableHeaderViewHeightWithAnimatable:NO duration:0.1 curve:UIViewAnimationCurveLinear];
weakSelf.cycleScrollView.hidden = NO;
weakSelf.backgourdImageView.hidden = NO;
weakSelf.categoryView.hidden = NO;
NSArray *imgs;
if (userModel.home_bgimages.length > 0) {
imgs = [userModel.home_bgimages componentsSeparatedByString:@","];
@@ -138,7 +144,7 @@
weakSelf.cycleScrollView.imageURLStringsGroup = imgs;
}
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
showToast(msg);
}];
}
#pragma mark - JXPagingViewDelegate

View File

@@ -10,6 +10,7 @@
#import "QXMineNetwork.h"
#import "QXSeatHeaderView.h"
#import "QXGiftPlayerManager.h"
#import "QXCustomAlertView.h"
@interface QXDressSubViewController ()<UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout>
@property (nonatomic,strong)QXSeatHeaderView *headerImageView;
@@ -46,17 +47,20 @@
}
-(void)getData{
MJWeakSelf
@weakify(self)
[QXMineNetwork userDressListWithType:self.model.id successBlock:^(NSArray<QXUserDressModel *> * _Nonnull list) {
[weakSelf.dataArray removeAllObjects];
[weakSelf.dataArray addObjectsFromArray:list];
if (list.count > 0 ) {
QXUserDressModel *model = [[QXUserDressModel alloc] init];
model.title = QXText(@"无");
model.udid = @"-1";
[weakSelf.dataArray insertObject:model atIndex:0];
@strongify(self);
[self.dataArray removeAllObjects];
[self.dataArray addObjectsFromArray:list];
if (![self.model.id isEqualToString:@"12"]) {
if (list.count > 0 ) {
QXUserDressModel *model = [[QXUserDressModel alloc] init];
model.title = QXText(@"无");
model.udid = @"-1";
[self.dataArray insertObject:model atIndex:0];
}
}
[weakSelf.collectionView reloadData];
[self.collectionView reloadData];
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
}];
@@ -76,8 +80,8 @@
return cell;
}
-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{
int width = (SCREEN_WIDTH-15*2-22*2-1)/3;
return CGSizeMake(width, width/100*120);
int width = (SCREEN_WIDTH-16*2-15*2-1)/3;
return CGSizeMake((int)width, ScaleWidth(136));
}
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
if (indexPath.row == self.selectedIndex) {
@@ -96,23 +100,45 @@
}
-(void)commitAction{
if (self.selectedIndex == -1) {
return;
}
QXUserDressModel *model = self.dataArray[self.selectedIndex];
if ([self.model.id isEqualToString:@"12"]) {
@weakify(self);
QXCustomAlertView *al = [[QXCustomAlertView alloc] init];
[al showInView:self.view title:@"温馨提示" message:[NSString stringWithFormat:@"亲爱的羽声用户,您好~ 您是否确认使用%@,本次使用后 您的身价会降至原身价的%@%%",model.title,model.ext_value] cancleTitle:@"取消" commitTitle:@"确认"];
al.commitBlock = ^{
@strongify(self);
[self commitNetworkWithModel:model];
};
return;
}
[self commitNetworkWithModel:model];
}
-(void)commitNetworkWithModel:(QXUserDressModel*)model{
BOOL isCancel = NO;
if ([model.udid isEqualToString:@"-1"]) {
isCancel = YES;
}else{
isCancel = NO;
}
MJWeakSelf
@weakify(self);
[QXMineNetwork setUserDressIsCancel:isCancel udid:model.udid type:self.model.id successBlock:^(NSDictionary * _Nonnull dict) {
if (weakSelf.model.id.intValue == 1) {
@strongify(self);
if (self.model.id.intValue == 1) {
[QXGlobal shareGlobal].loginModel.dress = model.play_image;
}
if (weakSelf.model.id.intValue == 9) {
if (self.model.id.intValue == 9) {
[QXGlobal shareGlobal].loginModel.chat_bubble = model.base_image;
}
[[QXGlobal shareGlobal] updateUserInfoWithMolde:[QXGlobal shareGlobal].loginModel];
showToast(@"设置成功");
if (self.model.id.intValue == 12) {
[self getData];
}
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
showToast(msg);
}];
@@ -135,9 +161,9 @@
-(UICollectionView *)collectionView{
if (!_collectionView) {
UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
layout.minimumLineSpacing = 22;
layout.minimumInteritemSpacing = 22;
layout.sectionInset = UIEdgeInsetsMake(0, 15, 0, 15);
layout.minimumLineSpacing = 15;
layout.minimumInteritemSpacing = 15;
layout.sectionInset = UIEdgeInsetsMake(0, 16, 0, 16);
_collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, self.headerImageView.bottom+12+12, SCREEN_WIDTH, SCREEN_HEIGHT-NavContentHeight) collectionViewLayout:layout];
_collectionView.delegate = self;
_collectionView.dataSource = self;

View File

@@ -6,17 +6,240 @@
//
#import "QXHeartBeatSpaceViewController.h"
#import "QXMineNetwork.h"
#import "QXHeartBeatSpaceRecordCell.h"
#import "QXHeartBeatLevelRuleView.h"
#import "QXUserCpDressView.h"
@interface QXHeartBeatSpaceViewController ()<UITableViewDelegate,UITableViewDataSource>
@property (nonatomic,strong)UIImageView *topImageView;
@property (nonatomic,strong)UIImageView *titleImageView;
@property (nonatomic,strong)UIImageView *flyImageView;
@property (nonatomic,strong)QXSeatHeaderView *leftHeaderView;
@property (nonatomic,strong)UIImageView *heartImageView;
@property (nonatomic,strong)QXSeatHeaderView *rightHeaderView;
@property (nonatomic,strong)UILabel *timeLabel;
@property (nonatomic,strong)UIView *recordContentView;
@property (nonatomic,strong)UIView *expView;
@property (nonatomic,strong)UILabel *expLabel;
@property (nonatomic,strong)UITableView *tableView;
@property (nonatomic,strong)UIImageView *cpDressBgImageView;
@property (nonatomic,strong)QXUserCpDressView *cpDressView;
@interface QXHeartBeatSpaceViewController ()
@end
@implementation QXHeartBeatSpaceViewController
- (void)viewDidLoad {
self.isNoChangeBgImage = YES;
[super viewDidLoad];
// Do any additional setup after loading the view.
}
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:NO animated:YES];
}
-(void)setNavgationItems{
[super setNavgationItems];
UIButton*recordBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 44, 44)];
[recordBtn setImage:[UIImage imageNamed:@"nobility_help_icon"] forState:(UIControlStateNormal)];
recordBtn.titleLabel.font = [UIFont systemFontOfSize:16];
[recordBtn addTarget:self action:@selector(helpAction) forControlEvents:(UIControlEventTouchUpInside)];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:recordBtn];
}
- (void)initSubViews{
[self updateBackImage:[UIImage imageNamed:@"mine_intimate_back"]];
self.page = 1;
self.view.backgroundColor = RGB16(0xBF8BFA);
self.topImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"user_heart_beat_space_bg"]];
self.topImageView.frame = CGRectMake(0, 0, SCREEN_WIDTH, ScaleWidth(336));
[self.view addSubview:self.topImageView];
self.titleImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"user_heart_beat_title"]];
self.titleImageView.frame = CGRectMake((SCREEN_WIDTH-ScaleWidth(199))/2, ScaleWidth(48), ScaleWidth(199), ScaleWidth(87));
[self.view addSubview:self.titleImageView];
self.flyImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"user_heart_beat_fly"]];
self.flyImageView.frame = CGRectMake((self.view.width-ScaleWidth(328))/2, self.titleImageView.top+ScaleWidth(24), ScaleWidth(328), ScaleWidth(184));
[self.view addSubview:self.flyImageView];
self.leftHeaderView = [[QXSeatHeaderView alloc] initWithFrame:CGRectMake(SCREEN_WIDTH/2-ScaleWidth(72), self.titleImageView.bottom+ScaleWidth(26), ScaleWidth(72), ScaleWidth(72))];
[self.leftHeaderView addRoundedCornersWithRadius:ScaleWidth(36)];
self.leftHeaderView.layer.borderWidth = 2;
self.leftHeaderView.layer.borderColor = RGB16(0xffffff).CGColor;
[self.view addSubview:self.leftHeaderView];
self.rightHeaderView = [[QXSeatHeaderView alloc] initWithFrame:CGRectMake(self.leftHeaderView.right, self.titleImageView.bottom+ScaleWidth(26), ScaleWidth(72), ScaleWidth(72))];
[self.rightHeaderView addRoundedCornersWithRadius:ScaleWidth(36)];
self.rightHeaderView.layer.borderWidth = 2;
self.rightHeaderView.layer.borderColor = RGB16(0xffffff).CGColor;
[self.view addSubview:self.rightHeaderView];
self.heartImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"user_heart_beat_heart_icon"]];
self.heartImageView.frame = CGRectMake(SCREEN_WIDTH/2-ScaleWidth(26/2), 0, ScaleWidth(26), ScaleWidth(26));
[self.view addSubview:self.heartImageView];
self.heartImageView.centerY = self.leftHeaderView.centerY;
self.timeLabel = [[UILabel alloc] init];
self.timeLabel.font = [UIFont systemFontOfSize:14];
self.timeLabel.textColor = RGB16(0xffffff);
self.timeLabel.backgroundColor = RGB16A(0x0300C8,0.35);
[self.timeLabel addRoundedCornersWithRadius:11.5];
[self.view addSubview:self.timeLabel];
self.recordContentView = [[UIView alloc] initWithFrame:CGRectMake(16, self.topImageView.bottom-ScaleWidth(20), SCREEN_WIDTH-32, self.view.height-self.topImageView.bottom-ScaleWidth(20))];
self.recordContentView.backgroundColor = RGB16(0xffffff);
[self.recordContentView addRoundedCornersWithRadius:12];
self.expView = [[UIView alloc] initWithFrame:CGRectMake(14, 14, self.recordContentView.width-28, ScaleWidth(89))];
[self.recordContentView addSubview:self.expView];
UIImageView *expImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"user_heart_beat_exp_bg"]];
expImageView.frame = self.expView.bounds;
[self.expView addSubview:expImageView];
self.expLabel = [[UILabel alloc] initWithFrame:CGRectMake(127, (self.expView.height-32)/2, self.expView.width-127-10, 32)];
self.expLabel.textColor = RGB16(0xffffff);
self.expLabel.font = [UIFont systemFontOfSize:16];
[self.expView addSubview:self.expLabel];
[self.recordContentView addSubview:self.tableView];
[self.view addSubview:self.recordContentView];
// user_heart_beat_exp_bg
self.cpDressBgImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"heart_beat_space_dress_bg"]];
self.cpDressBgImageView.frame = CGRectMake(self.view.width-ScaleWidth(115), 0, ScaleWidth(115), ScaleWidth(210));
[self.view addSubview:self.cpDressBgImageView];
self.cpDressBgImageView.centerY = self.leftHeaderView.centerY;
// [self.cpDressBgImageView mas_makeConstraints:^(MASConstraintMaker *make) {
// make.right.equalTo(self.view);
// make.centerY.equalTo(self.leftHeaderView);
// make.width.mas_equalTo(ScaleWidth(115));
// make.height.mas_equalTo(ScaleWidth(210));
// }];
self.cpDressView = [[QXUserCpDressView alloc] initWithFrame:self.cpDressBgImageView.frame];
[self.cpDressView hideHeader];
[self.view addSubview:self.cpDressView];
// [self.cpDressView mas_makeConstraints:^(MASConstraintMaker *make) {
// make.edges.equalTo(self.cpDressBgImageView);
// }];
self.cpDressView.hidden = YES;
self.cpDressBgImageView.hidden = YES;
}
-(void)helpAction{
QXHeartBeatLevelRuleView *view = [[QXHeartBeatLevelRuleView alloc] init];
NSString *urlStr = [NSString stringWithFormat:@"%@api/Page/page_show?id=31",ServerUrl];
view.rule = urlStr;
[view showInView:self.view];
}
-(void)setUserId:(NSString *)userId{
_userId = userId;
self.page = 1;
[self getList];
}
-(void)getList{
MJWeakSelf
[QXMineNetwork heartBeatUserInfoWithUserId:self.userId page:self.page successBlock:^(QXUserCpInfoModel * _Nonnull model) {
if (weakSelf.page == 1) {
if ([model.user_info1.user_id isEqualToString:weakSelf.userId]) {
[weakSelf.leftHeaderView setHeadIcon:model.user_info1.avatar dress:model.user_info1.dress];
[weakSelf.rightHeaderView setHeadIcon:model.user_info2.avatar dress:model.user_info2.dress];
}else{
[weakSelf.leftHeaderView setHeadIcon:model.user_info2.avatar dress:model.user_info2.dress];
[weakSelf.rightHeaderView setHeadIcon:model.user_info1.avatar dress:model.user_info1.dress];
}
if ([model.pendant isExist]) {
weakSelf.cpDressView.hidden = NO;
weakSelf.cpDressBgImageView.hidden = NO;
weakSelf.cpDressView.model = model;
}
NSTimeInterval currentTime = [[NSDate date] timeIntervalSince1970];
long long milliseconds = (long long)(currentTime);
NSInteger time = milliseconds - model.createtime.longLongValue;
weakSelf.timeLabel.text = [NSString stringWithFormat:@" 我们在一起%@啦 ",[NSString getTimeWithDay:time]];
[weakSelf.timeLabel sizeToFit];
weakSelf.timeLabel.centerX = weakSelf.topImageView.centerX;
weakSelf.timeLabel.height = 21;
weakSelf.timeLabel.top = weakSelf.leftHeaderView.bottom+ScaleWidth(21);
if (model.next_level_exp.integerValue <=0 ) {
weakSelf.expLabel.text = @"当前已是最高等级";
}else{
NSString *expString = [NSString stringWithFormat:@"还需%@经验升级",model.next_level_exp];
NSMutableAttributedString *attr = [[NSMutableAttributedString alloc] initWithString:expString];
[attr yy_setFont:[UIFont fontWithName:@"DIN Condensed" size:32] range:[expString rangeOfString:model.next_level_exp]];
[attr yy_setColor:RGB16(0xFFF022) range:[expString rangeOfString:model.next_level_exp]];
weakSelf.expLabel.attributedText = attr;
}
[weakSelf.dataArray removeAllObjects];
}
[weakSelf.dataArray addObjectsFromArray:model.gift_log];
[weakSelf.tableView reloadData];
if (model.gift_log.count == 0) {
weakSelf.tableView.mj_footer.state = MJRefreshStateNoMoreData;
}else{
[weakSelf.tableView.mj_footer endRefreshing];
}
[weakSelf.tableView.mj_header endRefreshing];
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
showToast(msg);
[weakSelf.tableView.mj_header endRefreshing];
[weakSelf.tableView.mj_footer endRefreshing];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[weakSelf.navigationController popViewControllerAnimated:YES];
});
}];
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return self.dataArray.count;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
QXHeartBeatSpaceRecordCell *cell = [QXHeartBeatSpaceRecordCell cellWithTableView:tableView];
cell.userId = self.userId;
cell.model = self.dataArray[indexPath.row];
return cell;
}
-(UITableView *)tableView{
if (!_tableView) {
_tableView = [[UITableView alloc] initWithFrame:CGRectMake(14,self.expView.bottom+6,self.recordContentView.width-28,self.recordContentView.height-self.expView.bottom-14-6) style:(UITableViewStylePlain)];
_tableView.dataSource = self;
_tableView.delegate = self;
_tableView.backgroundColor = RGB16(0xF4F4F4);
[_tableView addRoundedCornersWithRadius:12];
_tableView.tableFooterView = [UIView new];
_tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
_tableView.rowHeight = UITableViewAutomaticDimension;
_tableView.showsVerticalScrollIndicator = NO;
_tableView.showsHorizontalScrollIndicator = NO;
if (@available(iOS 15.0, *)) {
_tableView.sectionHeaderTopPadding = 0;
} else {
// Fallback on earlier versions
}
MJWeakSelf
_tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
weakSelf.page = 1;
[weakSelf getList];
}];
_tableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{
weakSelf.page++;
[weakSelf getList];
}];
}
return _tableView;
}
@end

View File

@@ -14,8 +14,9 @@
#import "QXMoreIntimateViewController.h"
#import "QXIntimateMoreListCell.h"
#import "QXHeartBeatSpaceViewController.h"
#import "QXUserHomePageViewController.h"
@interface QXIntimateViewController ()<UITableViewDataSource,UITableViewDelegate>
@interface QXIntimateViewController ()<UITableViewDataSource,UITableViewDelegate,QXUserCpCardViewDelegate,QXIntimateMoreListCellDelegate>
@property (nonatomic,strong)UITableView *tableView;
@property (nonatomic,strong)QXRoomBestFriendModel *model;
@end
@@ -79,6 +80,7 @@
QXMoreIntimateViewController *vc = [[QXMoreIntimateViewController alloc] init];
vc.userId = self.userId;
vc.relation_id = md.relation_list.firstObject.relation_id;
vc.relation_name = md.relation_name;
[self.navigationController pushViewController:vc animated:YES];
}
@@ -98,7 +100,9 @@
if (indexPath.section == 0) {
if (self.model.cp) {
QXIntimateCpCell *cell = [QXIntimateCpCell cellWithTableView:tableView];
cell.userId = self.userId;
cell.model = self.model.cp;
cell.delegate = self;
return cell;
}else{
QXIntimateNoCpCell *cell = [QXIntimateNoCpCell cellWithTableView:tableView];
@@ -108,6 +112,7 @@
QXRoomBestFriendListModel *md = self.dataArray[indexPath.section-1];
if (md.relation_list.count > 1) {
QXIntimateListCell*cell = [QXIntimateListCell cellWithTableView:tableView];
cell.userId = self.userId;
if (self.dataArray.count>0) {
QXRoomBestFriendListModel *md = self.dataArray[indexPath.section-1];
cell.model = md;
@@ -116,8 +121,10 @@
}else{
MJWeakSelf
QXIntimateMoreListCell *cell = [QXIntimateMoreListCell cellWithTableView:tableView];
cell.userId = self.userId;
QXRoomBestFriendListModel *md = self.dataArray.firstObject;
cell.model = md.relation_list.firstObject;
cell.delegate = self;
cell.deleteSuccessBlock = ^(QXRelationshipListModel * _Nonnull model) {
weakSelf.page = 1;
[weakSelf getList];
@@ -184,13 +191,13 @@
}
}else{
QXRoomBestFriendListModel *md = self.dataArray[indexPath.section-1];
if (md.relation_list.count > 1) {
if (md.relation_list.count == 1) {
return ScaleWidth(92)+18;
}else{
if (md.relation_list.count == 0) {
return 0;
}else{
return ScaleWidth(100)+16;
return ScaleWidth(125);
}
}
@@ -206,14 +213,35 @@
return 15;
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
if (indexPath.section == 0) {
if (self.model.cp) {
QXHeartBeatSpaceViewController *vc = [[QXHeartBeatSpaceViewController alloc] init];
vc.userId = self.userId;
[self.navigationController pushViewController:vc animated:YES];
}
// if (indexPath.section == 0) {
// if (self.model.cp) {
// QXHeartBeatSpaceViewController *vc = [[QXHeartBeatSpaceViewController alloc] init];
// vc.userId = self.userId;
// [self.navigationController pushViewController:vc animated:YES];
// }
// }
}
-(void)didClickHeaderCardViewWithUserId:(NSString *)userId{
if (self.model.cp) {
QXHeartBeatSpaceViewController *vc = [[QXHeartBeatSpaceViewController alloc] init];
vc.userId = self.userId;
[self.navigationController pushViewController:vc animated:YES];
}
}
-(void)didClickHeaderViewUserId:(NSString *)userId{
QXUserHomePageViewController *vc = [[QXUserHomePageViewController alloc] init];
vc.user_id = userId;
[self.navigationController pushViewController:vc animated:YES];
}
- (void)didClickHeaderWithUserId:(NSString *)userId{
QXUserHomePageViewController *vc = [[QXUserHomePageViewController alloc] init];
vc.user_id = userId;
[self.navigationController pushViewController:vc animated:YES];
}
-(UITableView *)tableView{
if (!_tableView) {
_tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, NavContentHeight+ScaleWidth(68), SCREEN_WIDTH, SCREEN_HEIGHT -NavContentHeight-ScaleWidth(68)) style:(UITableViewStyleGrouped)];

View File

@@ -12,6 +12,7 @@ NS_ASSUME_NONNULL_BEGIN
@interface QXMoreIntimateViewController : QXBaseViewController
@property (nonatomic,strong)NSString *userId;
@property (nonatomic,strong)NSString *relation_id;
@property (nonatomic,strong)NSString *relation_name;
@end
NS_ASSUME_NONNULL_END

View File

@@ -16,9 +16,30 @@
@implementation QXMoreIntimateViewController
- (void)viewDidLoad {
self.isNoChangeBgImage = YES;
[super viewDidLoad];
// Do any additional setup after loading the view.
}
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:NO animated:YES];
}
-(void)initSubViews{
[super initSubViews];
self.page = 1;
[self updateBgImage:@"mine_intimate_bg"];
[self updateBackImage:[UIImage imageNamed:@"mine_intimate_back"]];
UIImageView *titleImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"mine_intimate_title_img"]];
[self.view addSubview:titleImageView];
[titleImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.equalTo(self.view);
make.width.mas_equalTo(ScaleWidth(178));
make.height.mas_equalTo(ScaleWidth(68));
make.top.mas_equalTo(NavContentHeight);
}];
[self.view addSubview:self.tableView];
}
-(void)setUserId:(NSString *)userId{
_userId = userId;
}
@@ -33,6 +54,7 @@
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
QXIntimateMoreListCell *cell = [QXIntimateMoreListCell cellWithTableView:tableView];
cell.userId = self.userId;
cell.model = self.dataArray[indexPath.row];
MJWeakSelf
cell.topSuccessBlock = ^(QXRelationshipListModel * _Nonnull model) {
@@ -46,7 +68,29 @@
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return ScaleWidth(92)+16;
}
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
UIView *header = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.width, 50)];
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"mine_intimate_title_bg"]];
UILabel *titleLabel = [[UILabel alloc] init];
titleLabel.font = [UIFont boldSystemFontOfSize:16];
titleLabel.textColor = RGB16(0xffffff);
[header addSubview:imageView];
[header addSubview:titleLabel];
[imageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.mas_equalTo(132);
make.height.mas_equalTo(36);
make.centerX.centerY.equalTo(header);
}];
[titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.equalTo(header);
make.centerY.equalTo(header).offset(2);
}];
titleLabel.text = self.relation_name;
return header;
}
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
return 50;
}
-(void)getList{
MJWeakSelf
[QXMineNetwork userBestFriendsMoreListWithUserId:self.userId relation_id:self.relation_id successBlock:^(NSArray<QXRelationshipListModel *> * _Nonnull model) {

View File

@@ -0,0 +1,16 @@
//
// QXFamilyPriceRecordViewController.h
// QXLive
//
// Created by 启星 on 2025/11/26.
//
#import "QXBaseViewController.h"
NS_ASSUME_NONNULL_BEGIN
@interface QXFamilyPriceRecordViewController : QXBaseViewController
@property (nonatomic,strong)NSString *userId;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,129 @@
//
// QXFamilyPriceRecordViewController.m
// QXLive
//
// Created by on 2025/11/26.
//
#import "QXFamilyPriceRecordViewController.h"
#import "QXWalletDateView.h"
#import "QXFamilyPriceRecordCell.h"
#import "QXMineNetwork.h"
@interface QXFamilyPriceRecordViewController ()<QXWalletDateViewDelegate,UITableViewDelegate,UITableViewDataSource>
@property (nonatomic,strong)UIView *contentView;
@property (nonatomic,strong)UITableView *tableView;
@property (nonatomic,strong)QXWalletDateView *dateView;
@property (nonatomic,strong)NSString* startTime;
@property (nonatomic,strong)NSString* endTime;
@end
@implementation QXFamilyPriceRecordViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
}
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:NO animated:YES];
}
-(void)setNavgationItems{
[super setNavgationItems];
self.navigationItem.title = QXText(@"总收益");
}
-(void)initSubViews{
self.page = 1;
UIView *contentView = [[UIView alloc] initWithFrame:CGRectMake(16, NavContentHeight+12, SCREEN_WIDTH-32, SCREEN_HEIGHT-NavContentHeight-12)];
[contentView addRoundedCornersWithRadius:16];
contentView.backgroundColor = RGB16(0xffffff);
self.contentView = contentView;
[self.view addSubview:contentView];
[contentView addSubview:self.dateView];
[contentView addSubview:self.tableView];
}
-(void)setUserId:(NSString *)userId{
_userId = userId;
self.page = 1;
[self getList];
}
-(void)getList{
__weak typeof(self) weakSelf = self;
[QXMineNetwork getFamilyEarningWithUserId:self.userId successBlock:^(NSArray<QXFamilyEarningModel *> * _Nonnull list) {
__strong typeof(weakSelf) strongSelf = weakSelf;
if (!strongSelf) {
NSLog(@"⚠️ self has been deallocated, skipping hide operation");
return;
}
if (strongSelf.page == 1) {
[strongSelf.dataArray removeAllObjects];
}
[strongSelf.dataArray addObjectsFromArray:list];
[strongSelf.tableView reloadData];
if (list.count == 0) {
strongSelf.tableView.mj_footer.state = MJRefreshStateNoMoreData;
}else{
[strongSelf.tableView.mj_footer endRefreshing];
}
[strongSelf.tableView.mj_header endRefreshing];
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
dispatch_async(dispatch_get_main_queue(), ^{
__strong typeof(weakSelf) strongSelf = weakSelf;
if (strongSelf) {
[strongSelf.tableView.mj_header endRefreshing];
[strongSelf.tableView.mj_footer endRefreshing];
}
});
}];
//
// }];
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return self.dataArray.count;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
QXFamilyPriceRecordCell *cell = [QXFamilyPriceRecordCell cellWithTableView:tableView];
cell.model = self.dataArray[indexPath.row];
return cell;
}
#pragma mark - QXWalletDateViewDelegate
-(void)didSelectedStartDate:(NSString *)startDateString startDate:(NSDate *)startDate endDateString:(NSString *)endDateString endDate:(NSDate *)endDate{
QXLOG(@"开始时间-%@ 结束时间-%@",startDateString,endDateString);
self.startTime = startDateString;
self.endTime = endDateString;
self.page = 1;
[self getList];
}
-(QXWalletDateView *)dateView{
if (!_dateView) {
_dateView = [[QXWalletDateView alloc] initWithFrame:CGRectMake(12, 12, SCREEN_WIDTH-32-24, 38)];
_dateView.delegate = self;
}
return _dateView;
}
-(UITableView *)tableView{
if (!_tableView) {
_tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, self.dateView.bottom+10, SCREEN_WIDTH-32, self.contentView.height - self.dateView.bottom-10) style:(UITableViewStylePlain)];
_tableView.dataSource = self;
_tableView.delegate = self;
_tableView.backgroundColor = [UIColor whiteColor];
_tableView.tableFooterView = [UIView new];
_tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
_tableView.rowHeight = 107;
MJWeakSelf
_tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
weakSelf.page = 1;
[weakSelf getList];
}];
_tableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{
weakSelf.page++;
[weakSelf getList];
}];
}
return _tableView;
}
@end

View File

@@ -0,0 +1,17 @@
//
// QXFamilySubViewController.h
// QXLive
//
// Created by 启星 on 2025/11/26.
//
#import "QXBaseViewController.h"
NS_ASSUME_NONNULL_BEGIN
@interface QXFamilySubViewController : QXBaseViewController<JXCategoryListContentViewDelegate>
@property (nonatomic,assign)NSInteger index;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,145 @@
//
// QXFamilySubViewController.m
// QXLive
//
// Created by on 2025/11/26.
//
#import "QXFamilySubViewController.h"
#import "QXFamilyMemberCell.h"
#import "QXFamilyTopCell.h"
#import "QXMineNetwork.h"
@interface QXFamilySubViewController ()<UITableViewDelegate,UITableViewDataSource>
@property (nonatomic,strong)UITableView *tableView;
@property (nonatomic,strong)QXFamilyModel *model;
@end
@implementation QXFamilySubViewController
-(UIView *)listView{
return self.view;
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
}
- (void)initSubViews{
self.bgImageHidden = YES;
self.view.backgroundColor = RGB16(0x102477);
[self.view addSubview:self.tableView];
}
-(void)viewDidLayoutSubviews{
[super viewDidLayoutSubviews];
_tableView.frame = self.view.bounds;
}
-(void)setIndex:(NSInteger)index{
_index = index;
[self getList];
}
-(void)getList{
BOOL isJoin = YES;
if (self.index == 0) {
isJoin = YES;
}else{
isJoin = NO;
}
MJWeakSelf
[QXMineNetwork getMyFamilyIsJoin:isJoin successBlock:^(QXFamilyModel * _Nonnull model) {
weakSelf.model = model;
[weakSelf.tableView reloadData];
[weakSelf.tableView.mj_header endRefreshing];
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
}];
}
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
if (self.model) {
return 2;
}
return 0;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
if (section == 0) {
return 1;
}else{
return self.model.group_members_lists.count;
}
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
if (indexPath.section == 0) {
QXFamilyTopCell *cell = [QXFamilyTopCell cellWithTableView:tableView];
cell.model = self.model;
return cell;
}else{
QXFamilyMemberCell *cell = [QXFamilyMemberCell cellWithTableView:tableView];
cell.model = self.model.group_members_lists[indexPath.row];
return cell;
}
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
if (indexPath.section == 0) {
return 180;
}else{
return 176;
}
}
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
if (section == 0) {
return [UIView new];
}else{
UIView *header = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.width, 50)];
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"family_list_section_bg"]];
UILabel *titleLabel = [[UILabel alloc] init];
titleLabel.font = [UIFont boldSystemFontOfSize:16];
titleLabel.textColor = RGB16(0xffffff);
[header addSubview:imageView];
[header addSubview:titleLabel];
[imageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.mas_equalTo(132);
make.height.mas_equalTo(36);
make.centerX.centerY.equalTo(header);
}];
titleLabel.text = @"家族成员";
[titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.equalTo(header);
make.centerY.equalTo(header).offset(2);
}];
return header;
}
}
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
if (section == 0) {
return 0;
}
return 50;
}
-(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{
return [UIView new];
}
-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
return 0;
}
-(UITableView *)tableView{
if (!_tableView) {
_tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, self.view.height) style:(UITableViewStyleGrouped)];
_tableView.dataSource = self;
_tableView.delegate = self;
_tableView.backgroundColor = [UIColor clearColor];
_tableView.tableFooterView = [UIView new];
_tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
if (@available(iOS 15.0, *)) {
_tableView.sectionHeaderTopPadding = 0;
} else {
// Fallback on earlier versions
}
MJWeakSelf
_tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
[weakSelf getList];
}];
}
return _tableView;
}
@end

View File

@@ -0,0 +1,16 @@
//
// QXFamilyViewController.h
// QXLive
//
// Created by 启星 on 2025/11/26.
//
#import "QXBaseViewController.h"
NS_ASSUME_NONNULL_BEGIN
@interface QXFamilyViewController : QXBaseViewController
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,88 @@
//
// QXFamilyViewController.m
// QXLive
//
// Created by on 2025/11/26.
//
#import "QXFamilyViewController.h"
#import "QXFamilySubViewController.h"
@interface QXFamilyViewController ()<JXCategoryViewDelegate,JXCategoryListContainerViewDelegate>
@property (nonatomic,strong)UIImageView *topImageView;
@property (nonatomic,strong)JXCategoryTitleView *categoryView;
@property (nonatomic,strong)JXCategoryListContainerView *containerView;
@property (nonatomic,strong)NSMutableArray *titles;
@end
@implementation QXFamilyViewController
- (void)viewDidLoad {
self.isNoChangeBgImage = YES;
[super viewDidLoad];
// Do any additional setup after loading the view.
}
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:NO animated:YES];
self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName:RGB16(0xffffff)};
}
-(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName:RGB16(0x000000)};
}
-(void)setNavgationItems{
[super setNavgationItems];
self.navigationItem.title = QXText(@"家族");
self.navigationTintColor = RGB16(0xffffff);
}
- (void)initSubViews{
self.titles = [NSMutableArray arrayWithArray:@[@"我的家族",@"我加入的家族"]];
self.topImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"mine_family_top_bg"]];
self.topImageView.frame = CGRectMake(0, 0, SCREEN_WIDTH, ScaleWidth(435));
[self.view addSubview:self.topImageView];
self.view.backgroundColor = RGB16(0x102477);
self.categoryView = [[JXCategoryTitleView alloc] init];
self.categoryView.frame = CGRectMake((self.view.width-246)/2, NavContentHeight+ScaleWidth(236), 246, 38);
self.categoryView.delegate = self;
self.categoryView.titles = self.titles;
self.categoryView.backgroundColor = RGB16A(0x000000, 0.2);
[self.categoryView addRoundedCornersWithRadius:19];
self.categoryView.titleSelectedColor = [UIColor colorWithHexString:@"#333333"];
self.categoryView.titleColor = [UIColor colorWithHexString:@"#ffffff"];
self.categoryView.cellWidth = 123;
self.categoryView.contentEdgeInsetLeft = 0;
self.categoryView.cellSpacing = 0;
self.categoryView.contentEdgeInsetLeft = 0;
// self.categoryView.titleLabelZoomScale = 1.1;
// self.categoryView.titleLabelZoomEnabled = YES;
self.categoryView.titleFont = [UIFont boldSystemFontOfSize:14];
self.categoryView.titleSelectedFont = [UIFont boldSystemFontOfSize:14];
self.categoryView.averageCellSpacingEnabled = NO;
JXCategoryIndicatorBackgroundView *indicatorView = [[JXCategoryIndicatorBackgroundView alloc] init];
indicatorView.indicatorWidth = 123;
indicatorView.indicatorHeight = 38;
indicatorView.indicatorCornerRadius = 19;
indicatorView.indicatorColor = RGB16(0xA4FFB8);
self.categoryView.indicators = @[indicatorView];
self.containerView = [[JXCategoryListContainerView alloc] initWithType:(JXCategoryListContainerType_CollectionView) delegate:self];
self.containerView.frame = CGRectMake(0, self.categoryView.bottom+8, SCREEN_WIDTH, SCREEN_HEIGHT-self.categoryView.bottom-8);
[self.view addSubview:self.categoryView];
[self.view addSubview:self.containerView];
self.categoryView.listContainer = self.containerView;
}
-(NSInteger)numberOfListsInlistContainerView:(JXCategoryListContainerView *)listContainerView{
return self.titles.count;
}
-(id<JXCategoryListContentViewDelegate>)listContainerView:(JXCategoryListContainerView *)listContainerView initListForIndex:(NSInteger)index{
QXFamilySubViewController *vc = [[QXFamilySubViewController alloc] init];
vc.index = index;
return vc;
}
@end

View File

@@ -57,14 +57,19 @@
[self.navigationController pushViewController:vc animated:YES];
}
-(void)getPriceData{
MJWeakSelf
__weak typeof(self) weakSelf = self;
[QXMineNetwork roomWaterDetailWithRoomId:self.room_id start_time:self.startTime end_time:self.endTime page:self.page type:self.type successBlock:^(QXRoomDetailModel * _Nonnull model) {
weakSelf.headerView.model = model;
if (weakSelf.page == 1) {
[weakSelf.dict removeAllObjects];
__strong typeof(weakSelf) strongSelf = weakSelf;
if (!strongSelf) {
NSLog(@"⚠️ self has been deallocated, skipping hide operation");
return;
}
strongSelf.headerView.model = model;
if (strongSelf.page == 1) {
[strongSelf.dict removeAllObjects];
}
NSArray *arr = [weakSelf.dict allKeys];
NSArray *arr = [strongSelf.dict allKeys];
for (QXRoomWaterModel*md in model.list) {
BOOL haveKey = NO;
for (NSString *s in arr) {
@@ -75,10 +80,10 @@
}
if (!haveKey) {
// keyjson
[weakSelf.dict setObject:[md yy_modelToJSONString] forKey:md.time];
[strongSelf.dict setObject:[md yy_modelToJSONString] forKey:md.time];
}else{
//
NSString *json = [weakSelf.dict objectForKey:md.time];
NSString *json = [strongSelf.dict objectForKey:md.time];
//
QXRoomWaterModel *m = [QXRoomWaterModel yy_modelWithJSON:json];
//
@@ -88,10 +93,10 @@
//
m.list = newArr;
//
[weakSelf.dict setObject:[m yy_modelToJSONString] forKey:md.time];
[strongSelf.dict setObject:[m yy_modelToJSONString] forKey:md.time];
}
}
NSArray *keys = [weakSelf.dict.allKeys sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
NSArray *keys = [strongSelf.dict.allKeys sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
// NSString *s1 = obj1;
// NSString *s2 = obj2;
NSDateFormatter *dateFormatter1 = [[NSDateFormatter alloc] init];
@@ -110,18 +115,23 @@
return NSOrderedSame;
}
}];
self.allDateArray = [NSMutableArray arrayWithArray:keys];
[weakSelf.tableView reloadData];
[weakSelf.tableView.mj_header endRefreshing];
strongSelf.allDateArray = [NSMutableArray arrayWithArray:keys];
[strongSelf.tableView reloadData];
[strongSelf.tableView.mj_header endRefreshing];
if (model.list.count == 0) {
weakSelf.tableView.mj_footer.state = MJRefreshStateNoMoreData;
strongSelf.tableView.mj_footer.state = MJRefreshStateNoMoreData;
}else{
[weakSelf.tableView.mj_footer endRefreshing];
[strongSelf.tableView.mj_footer endRefreshing];
}
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
showToast(msg);
[weakSelf.tableView.mj_footer endRefreshing];
[weakSelf.tableView.mj_header endRefreshing];
dispatch_async(dispatch_get_main_queue(), ^{
__strong typeof(weakSelf) strongSelf = weakSelf;
if (strongSelf) {
showToast(msg);
[strongSelf.tableView.mj_header endRefreshing];
[strongSelf.tableView.mj_footer endRefreshing];
}
});
}];
}

View File

@@ -74,15 +74,22 @@
if (self.model == nil) {
return 0;
}
return 3;
if (self.model.tasks.teacher_tasks.count > 0) {
return 4;
}else{
return 3;
}
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
if (section == 0) {
return self.model.tasks.daily_tasks.count;
}else if(section == 1){
return self.model.tasks.daily_tasks_special.count;
}else{
}else if(section == 2){
return self.model.tasks.usual_tasks.count;
}else{
return self.model.tasks.teacher_tasks.count;
}
}
@@ -93,8 +100,10 @@
model = self.model.tasks.daily_tasks[indexPath.row];
}else if(indexPath.section == 1){
model = self.model.tasks.daily_tasks_special[indexPath.row];
}else{
}else if(indexPath.section == 2){
model = self.model.tasks.usual_tasks[indexPath.row];
}else{
model = self.model.tasks.teacher_tasks[indexPath.row];
}
cell.model = model;
return cell;
@@ -110,8 +119,10 @@
titleLabel.text = QXText(@"每日任务");
}else if(section == 1){
titleLabel.text = QXText(@"特殊任务");
}else{
}else if(section == 2){
titleLabel.text = QXText(@"平台任务");
}else{
titleLabel.text = QXText(@"师徒任务");
}
[header addSubview:titleLabel];
return header;

View File

@@ -40,22 +40,33 @@
// [self.dataArray addObject:@""];
// [self.tableView reloadData];
//
MJWeakSelf
__weak typeof(self) weakSelf = self;
[QXMineNetwork roomCoinOrDiamondDetailWithPage:self.page in_out_type:[NSString stringWithFormat:@"%ld",self.type+1] start_time:self.startTime end_time:self.endTime gift_type:[NSString stringWithFormat:@"%ld",self.waterType+1] successBlock:^(NSArray<QXCoinDetailModel *> * _Nonnull list) {
if (weakSelf.page == 1) {
[weakSelf.dataArray removeAllObjects];
__strong typeof(weakSelf) strongSelf = weakSelf;
if (!strongSelf) {
NSLog(@"⚠️ self has been deallocated, skipping hide operation");
return;
}
[weakSelf.dataArray addObjectsFromArray:list];
[weakSelf.tableView reloadData];
if (strongSelf.page == 1) {
[strongSelf.dataArray removeAllObjects];
}
[strongSelf.dataArray addObjectsFromArray:list];
[strongSelf.tableView reloadData];
if (list.count == 0) {
weakSelf.tableView.mj_footer.state = MJRefreshStateNoMoreData;
strongSelf.tableView.mj_footer.state = MJRefreshStateNoMoreData;
}else{
[weakSelf.tableView.mj_footer endRefreshing];
[strongSelf.tableView.mj_footer endRefreshing];
}
[weakSelf.tableView.mj_header endRefreshing];
[strongSelf.tableView.mj_header endRefreshing];
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
[weakSelf.tableView.mj_header endRefreshing];
[weakSelf.tableView.mj_footer endRefreshing];
dispatch_async(dispatch_get_main_queue(), ^{
__strong typeof(weakSelf) strongSelf = weakSelf;
if (strongSelf) {
[strongSelf.tableView.mj_header endRefreshing];
[strongSelf.tableView.mj_footer endRefreshing];
}
});
}];
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

View File

@@ -43,22 +43,32 @@
self.page = 1;
}
-(void)getData{
MJWeakSelf
__weak typeof(self) weakSelf = self;
[QXMineNetwork walletWithDrawRecordWithPage:self.page start_time:self.startTime end_time:self.endTime SuccessBlock:^(NSArray<QXWithDrawRecordModel *> * _Nonnull list) {
if (weakSelf.page == 1) {
[weakSelf.dataArray removeAllObjects];
__strong typeof(weakSelf) strongSelf = weakSelf;
if (!strongSelf) {
NSLog(@"⚠️ self has been deallocated, skipping hide operation");
return;
}
[weakSelf.dataArray addObjectsFromArray:list];
[weakSelf.tableView reloadData];
if (strongSelf.page == 1) {
[strongSelf.dataArray removeAllObjects];
}
[strongSelf.dataArray addObjectsFromArray:list];
[strongSelf.tableView reloadData];
if (list.count == 0) {
weakSelf.tableView.mj_footer.state = MJRefreshStateNoMoreData;
strongSelf.tableView.mj_footer.state = MJRefreshStateNoMoreData;
}else{
[weakSelf.tableView.mj_footer endRefreshing];
[strongSelf.tableView.mj_footer endRefreshing];
}
[weakSelf.tableView.mj_header endRefreshing];
[strongSelf.tableView.mj_header endRefreshing];
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
[weakSelf.tableView.mj_header endRefreshing];
[weakSelf.tableView.mj_footer endRefreshing];
dispatch_async(dispatch_get_main_queue(), ^{
__strong typeof(weakSelf) strongSelf = weakSelf;
if (strongSelf) {
[strongSelf.tableView.mj_header endRefreshing];
[strongSelf.tableView.mj_footer endRefreshing];
}
});
}];
}

View File

@@ -48,6 +48,7 @@ NS_ASSUME_NONNULL_BEGIN
/// 平台任务列表
@property(nonatomic,strong)NSArray <QXDayTaskListModel*>*usual_tasks;
@property(nonatomic,strong)NSArray <QXDayTaskListModel*>*teacher_tasks;
@end
@@ -74,6 +75,8 @@ NS_ASSUME_NONNULL_BEGIN
@property(nonatomic,strong)NSString *from_id;
/// 0 记录次数 1 计时
@property(nonatomic,strong)NSString *is_time;
/// 奖励类型 1金币 2钻石
@property(nonatomic,strong)NSString *reward_type;
@end

View File

@@ -28,6 +28,7 @@
@"daily_tasks" : @"QXDayTaskListModel",
@"usual_tasks" : @"QXDayTaskListModel",
@"daily_tasks_special": @"QXDayTaskListModel",
@"teacher_tasks": @"QXDayTaskListModel",
};
}

View File

@@ -0,0 +1,86 @@
//
// QXFamilyModel.h
// QXLive
//
// Created by 启星 on 2025/11/27.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@class QXFamilyMemberModel;
@interface QXFamilyModel : NSObject
/// 群组id
@property(nonatomic,strong)NSString *group_id;
/// 家族名称
@property(nonatomic,strong)NSString *name;
/// 族长id群主id
@property(nonatomic,strong)NSString *user_id;
/// 签约次数(群组人数)
@property(nonatomic,strong)NSString *group_members_num;
/// 总计收益
@property(nonatomic,strong)NSString *group_earnings;
/// 族长信息
@property(nonatomic,strong)QXUserModel *group_owner_info;
/// 家族成员
@property(nonatomic,strong)NSArray<QXFamilyMemberModel*> *group_members_lists;
@end
@interface QXFamilyMemberModel : NSObject
/// 身价
@property(nonatomic,strong)NSString *market_value;
/// 0 离线 1 在线
@property(nonatomic,assign)NSInteger is_online;
/// 昵称
@property(nonatomic,strong)NSString *nickname;
/// 头像
@property(nonatomic,strong)NSString *avatar;
/// 用户code
@property(nonatomic,strong)NSString *user_code;
/// 用户id
@property(nonatomic,strong)NSString *user_id;
/// 剩余多少天
@property(nonatomic,strong)NSString *end_time;
/// 剩余多少天
@property(nonatomic,strong)NSString *end_day;
/// 头像框
@property(nonatomic,strong)NSString *dress;
/// 头像框
@property(nonatomic,strong)NSArray *icon;
/// 麦圈
@property(nonatomic,strong)NSString *mic_cycle;
/// 爵位
@property(nonatomic,strong)NSString *nobility_image;
/// 昵称颜色
@property(nonatomic,strong)NSString *nickname_color;
/// 免费续签次数
@property(nonatomic,strong)NSString *free_renewal;
/// 今日收礼收益
@property(nonatomic,strong)NSString *today_earnings;
/// 昨日收礼收益
@property(nonatomic,strong)NSString *yesterday_earnings;
/// 是否显示续约按钮 1显示 0不显示
@property(nonatomic,strong)NSString *is_show_sign;
@end
@interface QXFamilyEarningModel : NSObject
/// 列表 id
@property(nonatomic,strong)NSString *id;
/// 用户昵称
@property(nonatomic,strong)NSString *nickname;
/// 头像
@property(nonatomic,strong)NSString *avatar;
/// 用户code
@property(nonatomic,strong)NSString *user_code;
/// 收益
@property(nonatomic,strong)NSString *earnings;
/// 时间
@property(nonatomic,strong)NSString *createtime;
/// 礼物名称
@property(nonatomic,strong)NSString *gift_name;
/// 礼物价格
@property(nonatomic,strong)NSString *gift_price;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,31 @@
//
// QXFamilyModel.m
// QXLive
//
// Created by on 2025/11/27.
//
#import "QXFamilyModel.h"
@implementation QXFamilyModel
+(NSDictionary<NSString *,id> *)modelContainerPropertyGenericClass{
return @{
@"group_owner_info" : @"QXFamilyMemberModel",
@"group_members_lists" : @"QXFamilyMemberModel",
};
}
@end
@implementation QXFamilyMemberModel
@end
@implementation QXFamilyEarningModel
@end

View File

@@ -11,7 +11,7 @@
#import "QXUserSongListModel.h"
NS_ASSUME_NONNULL_BEGIN
@class QXRoomInfoModel,QXRoomPitModel,QXRoomOwnerModel,QXHeadLineModel,QXRoomAuction,QXRoomAuctionUser,QXRoomCpUser,QXRoomPkInfo,QXRoomFriendInfo,QXRoomFriendHeartListModel,QXRoomActivitySubModel,QXRoomActivityModel,QXSingerInfo;
@class QXRoomInfoModel,QXRoomPitModel,QXRoomOwnerModel,QXHeadLineModel,QXRoomAuction,QXRoomAuctionUser,QXRoomCpUser,QXRoomPkInfo,QXRoomFriendInfo,QXRoomFriendHeartListModel,QXRoomActivitySubModel,QXRoomActivityModel,QXSingerInfo,QXRoomSignInfo;
@interface QXRoomModel : NSObject
/// 房间信息
@property (nonatomic,strong)QXRoomInfoModel *room_info;
@@ -33,6 +33,8 @@ NS_ASSUME_NONNULL_BEGIN
@property (nonatomic,strong)QXRoomPkInfo *pk_info;
/// 交友房信息
@property (nonatomic,strong)QXRoomFriendInfo *friend_info;
/// 签约房信息
@property (nonatomic,strong)QXRoomSignInfo *sign_info;
/// k歌麦位
@property (nonatomic,strong)NSArray< QXRoomPitModel*> *song_pit_list;
/// 活动
@@ -385,4 +387,19 @@ NS_ASSUME_NONNULL_BEGIN
@property (nonatomic,strong)QXUserSongListModel *song_info;
@property (nonatomic,strong)QXUserSongListModel *next_song_info;
@end
@interface QXRoomSignInfo :NSObject
/// 0 未开始 1进行中
@property (nonatomic,strong)NSString *sign_status;
/// 签约天数
@property (nonatomic,strong)NSString *sign_day;
/// 当前身价
@property (nonatomic,strong)NSString *current_body_value;
/// 倒计时 时间戳
@property (nonatomic,strong)NSString *end_time;
/// 签约场次id
@property (nonatomic,strong)NSString *sign_id;
@end
NS_ASSUME_NONNULL_END

View File

@@ -22,6 +22,7 @@
@"friend_info":@"QXRoomFriendInfo",
@"gift_cycle":@"QXRoomActivityModel",
@"singer_info":@"QXSingerInfo",
@"sign_info":@"QXRoomSignInfo",
};
}
@@ -155,4 +156,11 @@
};
}
@end
@implementation QXRoomSignInfo
@end

View File

@@ -32,6 +32,10 @@ NS_ASSUME_NONNULL_BEGIN
@property (nonatomic,strong)NSString *type;
/// 剩余时间 (天)
@property (nonatomic,strong)NSString *remaining_day;
/// 多少个
@property (nonatomic,strong)NSString *num;
/// 降身卡
@property (nonatomic,strong)NSString *ext_value;
@end

View File

@@ -7,7 +7,7 @@
#import <Foundation/Foundation.h>
@class QXRelationshipListModel,QXUserCpInfoModel;
@class QXRelationshipListModel,QXUserCpInfoModel,QXUserHeartBeatSpaceLogModel;
NS_ASSUME_NONNULL_BEGIN
@interface QXUserModel : NSObject
@@ -55,6 +55,8 @@ NS_ASSUME_NONNULL_BEGIN
@property (nonatomic,assign)NSInteger is_can_chat;
/// 需要充值金额
@property (nonatomic,strong)NSString* can_chat_money;
/// 身价
@property (nonatomic,strong)NSString* market_value;
@end
@@ -272,11 +274,31 @@ NS_ASSUME_NONNULL_BEGIN
@property (nonatomic,strong)NSString *user_id2;
@property (nonatomic,strong)NSString *level;
@property (nonatomic,strong)NSString *exp;
@property (nonatomic,strong)NSString *next_level_exp;
@property (nonatomic,strong)NSString *createtime;
/// 挂件(装扮)地址
@property (nonatomic,strong)NSString *pendant;
/// 挂件上的头像位置0-上1-右上2-右3-右下4-下5-左下6-左7-左上'
@property (nonatomic,strong)NSString *direction;
@property (nonatomic,strong)QXUserModel *user_info1;
@property (nonatomic,strong)QXUserModel *user_info2;
@property (nonatomic,strong)NSArray< QXUserHeartBeatSpaceLogModel *>*gift_log;
@end
@interface QXUserHeartBeatSpaceLogModel : NSObject
@property (nonatomic,strong)NSString *id;
@property (nonatomic,strong)NSString *room_id;
@property (nonatomic,strong)NSString *from_user_id;
@property (nonatomic,strong)NSString *to_user_id;
@property (nonatomic,strong)NSString *gift_id;
@property (nonatomic,strong)NSString *cp_zone_id;
@property (nonatomic,strong)NSString *exp;
@property (nonatomic,strong)NSString *exp_total;
@property (nonatomic,strong)NSString *createtime;
@property (nonatomic,strong)NSString *gift_name;
@property (nonatomic,strong)NSString *num;
@property (nonatomic,strong)NSString *remark;
@property (nonatomic,strong)QXUserModel *from_user_info;
@property (nonatomic,strong)QXUserModel *to_user_info;
@end
NS_ASSUME_NONNULL_END

View File

@@ -93,7 +93,22 @@
// @"zhenai" : @"QXRelationshipListModel"
@"user_info1": @"QXUserModel",
@"user_info2": @"QXUserModel",
@"gift_log" : @"QXUserHeartBeatSpaceLogModel"
};
}
@end
@implementation QXUserHeartBeatSpaceLogModel
+(NSDictionary<NSString *,id> *)modelContainerPropertyGenericClass{
return @{
// @"qinmi" : @"QXRelationshipListModel",
// @"zhenai" : @"QXRelationshipListModel"
@"from_user_info": @"QXUserModel",
@"to_user_info": @"QXUserModel",
};
}
@end

View File

@@ -30,6 +30,7 @@
#import "QXNobilityGetPriceModel.h"
#import "QXUserSongListModel.h"
#import "QXRoomBestFriendModel.h"
#import "QXFamilyModel.h"
NS_ASSUME_NONNULL_BEGIN
@@ -1281,6 +1282,101 @@ NS_ASSUME_NONNULL_BEGIN
successBlock:(void (^)(NSArray< QXRelationshipListModel*>* model))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
/**
亲密空间
*/
+(void)heartBeatUserInfoWithUserId:(NSString*)userId
page:(NSInteger)page
successBlock:(void (^)(QXUserCpInfoModel* model))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
/**
我的家族|我加入的家族
*/
+(void)getMyFamilyIsJoin:(BOOL)isJoin
successBlock:(void (^)(QXFamilyModel* model))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
/**
家族收益详情
*/
+(void)getFamilyEarningWithUserId:(NSString*)userId
successBlock:(void (^)(NSArray<QXFamilyEarningModel*>* list))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
/**
签约出价价格列表
userId 当前在签约麦位的用户ID
*/
+(void)signCoinListWithSignId:(NSString*)signId
successBlock:(void (^)(NSArray<NSString*>* list))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
/**
签约出价
userId 当前在签约麦位的用户ID
sign_value 出价价格
sign_id 场次id
*/
+(void)signCoinWithSign_value:(NSString*)sign_value
sign_id:(NSString*)sign_id
successBlock:(void (^)(NSDictionary* dict))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
/**
签约开始
userId 当前在签约麦位的用户ID
*/
+(void)signStartWithRoomId:(NSString*)roomId
userId:(NSString*)userId
successBlock:(void (^)(NSDictionary* dict))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
/**
签约结束
userId 当前在签约麦位的用户ID
signId 场次id
*/
+(void)signEndWithSignId:(NSString*)signId
successBlock:(void (^)(NSDictionary* dict))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
/**
签约延时
userId 当前在签约麦位的用户ID
signId 场次id
*/
+(void)signDelayWithSignId:(NSString*)signId
successBlock:(void (^)(NSDictionary* dict))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
/**
才艺列表
*/
+(void)signGeyPlayListSuccessBlock:(void (^)(NSArray* list))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
/**
免费续约
userId 当前在签约麦位的用户ID
*/
+(void)signFreeResignWithUserId:(NSString*)userId
successBlock:(void (^)(NSDictionary* dict))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
/**
续签
userId 当前在签约麦位的用户ID
*/
+(void)signCoinResignWithUserId:(NSString*)userId
successBlock:(void (^)(NSDictionary* dict))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock;
@end

View File

@@ -73,7 +73,7 @@
successBlock:(void (^)(QXUserHomeModel * _Nonnull))successBlock
failBlock:(void (^)(NSError * _Nonnull, NSString * _Nonnull))failBlock{
NSDictionary *parameters =@{
@"user_id":user_id,
@"user_id":user_id?:@"",
};
[[QXRequset shareInstance] postWithUrl:QXGetUserInfo parameters:parameters needCache:NO success:^(id responseObject) {
if (successBlock) {
@@ -285,7 +285,7 @@
successBlock:(void (^)(NSArray<QXDynamicModel *> * _Nonnull))successBlock
failBlock:(void (^)(NSError * _Nonnull, NSString * _Nonnull))failBlock{
NSDictionary *parameters =@{
@"user_id":user_id,
@"user_id":user_id?:@"",
@"page":[NSNumber numberWithInteger:page]
};
[[QXRequset shareInstance] postWithUrl:QXUserDynamic parameters:parameters needCache:NO success:^(id responseObject) {
@@ -2544,4 +2544,222 @@
failBlock(error,msg);
}];
}
/**
*/
+(void)heartBeatUserInfoWithUserId:(NSString*)userId
page:(NSInteger)page
successBlock:(void (^)(QXUserCpInfoModel* model))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock{
NSDictionary *parameters =@{
@"user_id":userId?:@"",
@"page":[NSNumber numberWithInteger:page]
};
[[QXRequset shareInstance] postWithUrl:QXHeartBeatSpace parameters:parameters needCache:NO success:^(id responseObject) {
if (successBlock) {
QXUserCpInfoModel *model = [QXUserCpInfoModel yy_modelWithJSON:responseObject[@"data"]];
successBlock(model);
}
} fail:^(NSError *error, NSString *msg, NSURLSessionDataTask *task) {
failBlock(error,msg);
}];
}
/**
|
*/
+(void)getMyFamilyIsJoin:(BOOL)isJoin
successBlock:(void (^)(QXFamilyModel* model))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock{
[[QXRequset shareInstance] getWithUrl:QXMyFamily parameters:@{} needCache:NO success:^(id responseObject) {
if (successBlock) {
QXFamilyModel *model = [QXFamilyModel yy_modelWithJSON:responseObject[@"data"]];
successBlock(model);
}
} fail:^(NSError *error, NSString *msg, NSURLSessionDataTask *task) {
failBlock(error,msg);
}];
}
/**
*/
+(void)getFamilyEarningWithUserId:(NSString*)userId
successBlock:(void (^)(NSArray<QXFamilyEarningModel*>* list))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock{
NSDictionary *parameters =@{
@"user_id":userId?:@"",
};
[[QXRequset shareInstance] postWithUrl:QXHeartBeatSpace parameters:parameters needCache:NO success:^(id responseObject) {
if (successBlock) {
NSArray *list = [NSArray yy_modelArrayWithClass:[QXFamilyEarningModel class] json:responseObject[@"data"]];
successBlock(list);
}
} fail:^(NSError *error, NSString *msg, NSURLSessionDataTask *task) {
failBlock(error,msg);
}];
}
/**
userId ID
*/
+(void)signCoinListWithSignId:(NSString *)signId successBlock:(void (^)(NSArray<NSString *> * _Nonnull))successBlock failBlock:(void (^)(NSError * _Nonnull, NSString * _Nonnull))failBlock{
NSDictionary *parameters =@{
@"sign_id":signId?:@"",
};
[[QXRequset shareInstance] postWithUrl:QXSignCoinList parameters:parameters needCache:NO success:^(id responseObject) {
if (successBlock) {
id object = responseObject[@"data"];
if ([object isKindOfClass:[NSArray class]]) {
successBlock(object);
}else{
successBlock([NSArray array]);
}
}
} fail:^(NSError *error, NSString *msg, NSURLSessionDataTask *task) {
failBlock(error,msg);
}];
}
/**
userId ID
sign_value
sign_id id
*/
+(void)signCoinWithSign_value:(NSString*)sign_value
sign_id:(NSString*)sign_id
successBlock:(void (^)(NSDictionary* dict))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock{
NSDictionary *parameters =@{
@"sign_value":sign_value?:@"",
@"sign_id":sign_id?:@""
};
[[QXRequset shareInstance] postWithUrl:QXSignSignCoin parameters:parameters needCache:NO success:^(id responseObject) {
if (successBlock) {
successBlock(responseObject[@"data"]);
}
} fail:^(NSError *error, NSString *msg, NSURLSessionDataTask *task) {
failBlock(error,msg);
}];
}
/**
userId ID
*/
+(void)signStartWithRoomId:(NSString*)roomId
userId:(NSString*)userId
successBlock:(void (^)(NSDictionary* dict))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock{
NSDictionary *parameters =@{
@"room_id":roomId?:@"",
@"user_id":userId?:@""
};
[[QXRequset shareInstance] postWithUrl:QXSignStartSign parameters:parameters needCache:NO success:^(id responseObject) {
if (successBlock) {
successBlock(responseObject[@"data"]);
}
} fail:^(NSError *error, NSString *msg, NSURLSessionDataTask *task) {
failBlock(error,msg);
}];
}
/**
userId ID
signId id
*/
+(void)signEndWithSignId:(NSString*)signId
successBlock:(void (^)(NSDictionary* dict))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock{
NSDictionary *parameters =@{
@"sign_id":signId?:@"",
};
[[QXRequset shareInstance] postWithUrl:QXSignEndSign parameters:parameters needCache:NO success:^(id responseObject) {
if (successBlock) {
successBlock(responseObject[@"data"]);
}
} fail:^(NSError *error, NSString *msg, NSURLSessionDataTask *task) {
failBlock(error,msg);
}];
}
/**
userId ID
signId id
*/
+(void)signDelayWithSignId:(NSString*)signId
successBlock:(void (^)(NSDictionary* dict))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock{
NSDictionary *parameters =@{
@"sign_id":signId?:@"",
};
[[QXRequset shareInstance] postWithUrl:QXSignDelaySign parameters:parameters needCache:NO success:^(id responseObject) {
if (successBlock) {
successBlock(responseObject[@"data"]);
}
} fail:^(NSError *error, NSString *msg, NSURLSessionDataTask *task) {
failBlock(error,msg);
}];
}
/**
*/
+(void)signGeyPlayListSuccessBlock:(void (^)(NSArray* list))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock{
[[QXRequset shareInstance] getWithUrl:QXSignPlayList parameters:@{} needCache:NO success:^(id responseObject) {
if (successBlock) {
successBlock(responseObject[@"data"]);
}
} fail:^(NSError *error, NSString *msg, NSURLSessionDataTask *task) {
failBlock(error,msg);
}];
}
/**
userId ID
*/
+(void)signFreeResignWithUserId:(NSString*)userId
successBlock:(void (^)(NSDictionary* dict))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock{
NSDictionary *parameters =@{
@"user_id":userId?:@"",
};
[[QXRequset shareInstance] postWithUrl:QXSignFreeResign parameters:parameters needCache:NO success:^(id responseObject) {
if (successBlock) {
successBlock(responseObject[@"data"]);
}
} fail:^(NSError *error, NSString *msg, NSURLSessionDataTask *task) {
failBlock(error,msg);
}];
}
/**
userId ID
*/
+(void)signCoinResignWithUserId:(NSString*)userId
successBlock:(void (^)(NSDictionary* dict))successBlock
failBlock:(void (^)(NSError * error, NSString * msg))failBlock{
NSDictionary *parameters =@{
@"user_id":userId?:@"",
};
[[QXRequset shareInstance] postWithUrl:QXSignCoinResign parameters:parameters needCache:NO success:^(id responseObject) {
if (successBlock) {
successBlock(responseObject[@"data"]);
}
} fail:^(NSError *error, NSString *msg, NSURLSessionDataTask *task) {
failBlock(error,msg);
}];
}
@end

View File

@@ -0,0 +1,23 @@
//
// QXBodyPriceRuleView.h
// QXLive
//
// Created by 启星 on 2025/11/25.
//
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface QXBodyPriceRuleView : UIView
@property (weak, nonatomic) IBOutlet UILabel *currentPriceLabel;
@property (weak, nonatomic) IBOutlet UILabel *beyoundPriceLabel;
@property (weak, nonatomic) IBOutlet UILabel *recievePriceLabel;
@property (weak, nonatomic) IBOutlet UILabel *realPriceLabel;
@property (weak, nonatomic) IBOutlet UIButton *commitBtn;
@property (weak, nonatomic) IBOutlet UIButton *closeBtn;
@property (weak, nonatomic) IBOutlet UIView *bgView;
+(void)showInView:(UIView*)view;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,41 @@
//
// QXBodyPriceRuleView.m
// QXLive
//
// Created by on 2025/11/25.
//
#import "QXBodyPriceRuleView.h"
@implementation QXBodyPriceRuleView
+(void)showInView:(UIView*)view{
UINib *nib = [UINib nibWithNibName:@"QXBodyPriceRuleView" bundle:[NSBundle mainBundle]];
QXBodyPriceRuleView *ruleView = [nib instantiateWithOwner:nil options:nil].firstObject;
ruleView.frame = UIScreen.mainScreen.bounds;
ruleView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
ruleView.bgView.alpha = 0;
[view addSubview:ruleView];
[UIView animateWithDuration:0.2 animations:^{
ruleView.bgView.alpha = 1;
}completion:^(BOOL finished) {
}];
}
- (IBAction)closeAction:(id)sender {
[UIView animateWithDuration:0.2 animations:^{
self.bgView.alpha = 0;
}completion:^(BOOL finished) {
[self removeFromSuperview];
}];
}
- (IBAction)commitAction:(id)sender {
[UIView animateWithDuration:0.3 animations:^{
self.bgView.alpha = 0;
}completion:^(BOOL finished) {
[self removeFromSuperview];
}];
}
@end

View File

@@ -0,0 +1,386 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23504" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<device id="retina6_12" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23506"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="System colors in document resources" minToolsVersion="11.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="iN0-l3-epB" customClass="QXBodyPriceRuleView">
<rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="bjS-Eu-Wht">
<rect key="frame" x="40.666666666666657" y="203.66666666666663" width="312" height="470"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="body_price_rule_bg" translatesAutoresizingMaskIntoConstraints="NO" id="0pu-br-WLc">
<rect key="frame" x="0.0" y="0.0" width="312" height="470"/>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="身价详情" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Cey-rm-4VM">
<rect key="frame" x="124.00000000000001" y="11" width="63.666666666666671" height="24"/>
<constraints>
<constraint firstAttribute="height" constant="24" id="QMU-XW-UiY"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ag3-iq-BzI">
<rect key="frame" x="272" y="2" width="40" height="40"/>
<constraints>
<constraint firstAttribute="width" constant="40" id="1RM-bw-F5f"/>
<constraint firstAttribute="height" constant="40" id="jXb-VG-MeW"/>
</constraints>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" image="wallet_close"/>
<connections>
<action selector="closeAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="Kn0-Ed-x94"/>
</connections>
</button>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="r7a-Qi-IKE">
<rect key="frame" x="16" y="46" width="280" height="113"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="当前身价" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="zaH-Pt-FkB">
<rect key="frame" x="112" y="10.000000000000028" width="56" height="18"/>
<constraints>
<constraint firstAttribute="height" constant="18" id="c6c-Ff-k6z"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<color key="textColor" red="1" green="0.46666666666666667" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="1" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="yoB-8g-xXJ">
<rect key="frame" x="126.33333333333333" y="34.000000000000028" width="9.3333333333333286" height="28"/>
<constraints>
<constraint firstAttribute="height" constant="28" id="ZUT-FY-fDo"/>
</constraints>
<fontDescription key="fontDescription" type="system" weight="medium" pointSize="20"/>
<color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="room_upseat_coin" translatesAutoresizingMaskIntoConstraints="NO" id="yiz-ZZ-xxm">
<rect key="frame" x="137.66666666666669" y="39.000000000000028" width="18" height="18"/>
<constraints>
<constraint firstAttribute="height" constant="18" id="AN3-EC-ehA"/>
<constraint firstAttribute="width" constant="18" id="wI0-ag-JJ4"/>
</constraints>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="注每个用户默认身价是1金币收到礼物后按照比例进行换算身价" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="WwA-Jn-1rz">
<rect key="frame" x="16" y="68.000000000000028" width="248" height="39"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<color key="textColor" red="0.81176470588235294" green="0.61568627450980395" blue="0.25098039215686274" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
<constraints>
<constraint firstItem="zaH-Pt-FkB" firstAttribute="centerX" secondItem="r7a-Qi-IKE" secondAttribute="centerX" id="0oM-i5-9OG"/>
<constraint firstAttribute="bottom" secondItem="WwA-Jn-1rz" secondAttribute="bottom" constant="6" id="71t-4W-LuP"/>
<constraint firstItem="yiz-ZZ-xxm" firstAttribute="leading" secondItem="yoB-8g-xXJ" secondAttribute="trailing" constant="2" id="Ggm-C5-Wcb"/>
<constraint firstAttribute="height" constant="113" id="MH5-pp-kd7"/>
<constraint firstItem="yoB-8g-xXJ" firstAttribute="centerX" secondItem="r7a-Qi-IKE" secondAttribute="centerX" constant="-9" id="Saa-J0-KwU"/>
<constraint firstAttribute="trailing" secondItem="WwA-Jn-1rz" secondAttribute="trailing" constant="16" id="YcU-Q9-sKB"/>
<constraint firstItem="WwA-Jn-1rz" firstAttribute="leading" secondItem="r7a-Qi-IKE" secondAttribute="leading" constant="16" id="auv-o8-JaK"/>
<constraint firstItem="WwA-Jn-1rz" firstAttribute="top" secondItem="yoB-8g-xXJ" secondAttribute="bottom" constant="6" id="m3G-Qk-pBp"/>
<constraint firstItem="zaH-Pt-FkB" firstAttribute="top" secondItem="r7a-Qi-IKE" secondAttribute="top" constant="10" id="maZ-g1-7I4"/>
<constraint firstItem="yiz-ZZ-xxm" firstAttribute="centerY" secondItem="yoB-8g-xXJ" secondAttribute="centerY" id="rIl-iA-pcw"/>
<constraint firstItem="yoB-8g-xXJ" firstAttribute="top" secondItem="zaH-Pt-FkB" secondAttribute="bottom" constant="6" id="ywl-ba-UsO"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="8"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="22W-Pg-BGs">
<rect key="frame" x="16" y="167" width="280" height="229"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="1qh-1U-0g1">
<rect key="frame" x="19.000000000000007" y="25" width="47.999999999999993" height="48"/>
<color key="backgroundColor" red="0.72156862745098038" green="0.92156862745098034" blue="0.97647058823529409" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="48" id="Bvl-n0-GY5"/>
<constraint firstAttribute="width" constant="48" id="e9Z-Jy-yV7"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="24"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="竞拍溢价" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="R5s-ew-2ma">
<rect key="frame" x="23.000000000000007" y="31.999999999999996" width="40" height="33.666666666666657"/>
<constraints>
<constraint firstAttribute="width" constant="40" id="55m-tS-xSt"/>
</constraints>
<fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
<color key="textColor" red="0.20392156862745098" green="0.54117647058823526" blue="0.83529411764705885" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="+" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="1nL-zB-s12">
<rect key="frame" x="79" y="35" width="12.666666666666671" height="28"/>
<constraints>
<constraint firstAttribute="height" constant="28" id="Npx-zw-09W"/>
</constraints>
<fontDescription key="fontDescription" type="system" weight="medium" pointSize="20"/>
<color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="pvx-IE-jQQ">
<rect key="frame" x="103.66666666666669" y="25" width="48" height="48"/>
<color key="backgroundColor" red="0.97254901960784312" green="0.90980392156862744" blue="0.78431372549019607" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="48" id="9wK-lu-5ww"/>
<constraint firstAttribute="width" constant="48" id="oXU-Bh-nt7"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="24"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="=" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="2Ef-wH-HNE">
<rect key="frame" x="163.66666666666669" y="34" width="12.666666666666657" height="28"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" weight="medium" pointSize="20"/>
<color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="收礼身价" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="FDt-UE-yKg">
<rect key="frame" x="107.66666666666669" y="31.999999999999996" width="40" height="33.666666666666657"/>
<constraints>
<constraint firstAttribute="width" constant="40" id="md1-1F-BXo"/>
</constraints>
<fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
<color key="textColor" red="0.92941176470588238" green="0.66666666666666663" blue="0.098039215686274508" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="TCX-JN-r9B">
<rect key="frame" x="189" y="13" width="72" height="72"/>
<color key="backgroundColor" red="0.6470588235294118" green="1" blue="0.76078431372549016" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="width" constant="72" id="UFB-82-XSq"/>
<constraint firstAttribute="height" constant="72" id="h6t-2i-vCw"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="36"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="实际身价" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="TJG-ml-Bip">
<rect key="frame" x="200.00000000000003" y="27.333333333333314" width="50" height="43"/>
<constraints>
<constraint firstAttribute="width" constant="50" id="Kof-yq-JSa"/>
</constraints>
<fontDescription key="fontDescription" type="system" weight="medium" pointSize="18"/>
<color key="textColor" red="0.0" green="0.53725490196078429" blue="0.15294117647058825" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="dJ6-LR-vgw">
<rect key="frame" x="16" y="98" width="117" height="119"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="1RH-Mf-SWP">
<rect key="frame" x="0.0" y="0.0" width="117" height="24"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="竞拍溢价" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="uK0-7X-IBc">
<rect key="frame" x="34.333333333333329" y="4.3333333333333144" width="48" height="15"/>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<color key="textColor" red="0.20392156862745098" green="0.54117647058823526" blue="0.83529411764705885" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" red="0.68235294117647061" green="0.92941176470588238" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="24" id="8em-ee-gLY"/>
<constraint firstItem="uK0-7X-IBc" firstAttribute="centerY" secondItem="1RH-Mf-SWP" secondAttribute="centerY" id="Q5j-gJ-Sxm"/>
<constraint firstItem="uK0-7X-IBc" firstAttribute="centerX" secondItem="1RH-Mf-SWP" secondAttribute="centerX" id="cha-7w-LSq"/>
</constraints>
</view>
<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="NRs-fX-FIN">
<rect key="frame" x="8" y="32" width="101" height="79"/>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<color key="textColor" red="0.29411764705882354" green="0.66274509803921566" blue="0.76862745098039209" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" red="0.89803921568627454" green="0.96862745098039216" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="width" constant="117" id="4rA-dE-Rhv"/>
<constraint firstAttribute="trailing" secondItem="1RH-Mf-SWP" secondAttribute="trailing" id="5da-35-QcR"/>
<constraint firstItem="NRs-fX-FIN" firstAttribute="top" secondItem="1RH-Mf-SWP" secondAttribute="bottom" constant="8" id="QTq-Mw-KUH"/>
<constraint firstItem="NRs-fX-FIN" firstAttribute="leading" secondItem="dJ6-LR-vgw" secondAttribute="leading" constant="8" id="Wtk-ZE-Iu3"/>
<constraint firstAttribute="bottom" secondItem="NRs-fX-FIN" secondAttribute="bottom" constant="8" id="YMJ-9a-hmC"/>
<constraint firstItem="1RH-Mf-SWP" firstAttribute="top" secondItem="dJ6-LR-vgw" secondAttribute="top" id="Z3L-1R-FJy"/>
<constraint firstAttribute="trailing" secondItem="NRs-fX-FIN" secondAttribute="trailing" constant="8" id="kfY-Vy-yGv"/>
<constraint firstItem="1RH-Mf-SWP" firstAttribute="leading" secondItem="dJ6-LR-vgw" secondAttribute="leading" id="lmc-Ys-kzq"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="8"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="5QI-g5-Etm">
<rect key="frame" x="144" y="98" width="117" height="119"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="16p-zb-VAB">
<rect key="frame" x="0.0" y="0.0" width="117" height="24"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="竞拍溢价" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="DfF-lh-oXh">
<rect key="frame" x="34.333333333333343" y="4.3333333333333144" width="48" height="15"/>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<color key="textColor" red="0.72549019607843135" green="0.57647058823529407" blue="0.11372549019607843" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" red="1" green="0.90196078431372551" blue="0.59215686274509804" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="DfF-lh-oXh" firstAttribute="centerY" secondItem="16p-zb-VAB" secondAttribute="centerY" id="6If-AV-pYD"/>
<constraint firstItem="DfF-lh-oXh" firstAttribute="centerX" secondItem="16p-zb-VAB" secondAttribute="centerX" id="8Eb-hb-bCP"/>
<constraint firstAttribute="height" constant="24" id="Oeu-V9-5eq"/>
</constraints>
</view>
<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="M4h-lx-wJ4">
<rect key="frame" x="8" y="32" width="101" height="79"/>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<color key="textColor" red="0.92941176470588238" green="0.66666666666666663" blue="0.098039215686274508" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" red="0.96470588235294119" green="0.97254901960784312" blue="0.89803921568627454" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="16p-zb-VAB" firstAttribute="leading" secondItem="5QI-g5-Etm" secondAttribute="leading" id="Bbm-E2-7J9"/>
<constraint firstAttribute="bottom" secondItem="M4h-lx-wJ4" secondAttribute="bottom" constant="8" id="GGC-6Y-cpC"/>
<constraint firstItem="M4h-lx-wJ4" firstAttribute="leading" secondItem="5QI-g5-Etm" secondAttribute="leading" constant="8" id="OLC-Xu-jcE"/>
<constraint firstItem="16p-zb-VAB" firstAttribute="top" secondItem="5QI-g5-Etm" secondAttribute="top" id="PQm-S7-LCt"/>
<constraint firstItem="M4h-lx-wJ4" firstAttribute="top" secondItem="16p-zb-VAB" secondAttribute="bottom" constant="8" id="bhY-eL-Te3"/>
<constraint firstAttribute="width" constant="117" id="fPg-ws-iOS"/>
<constraint firstAttribute="trailing" secondItem="16p-zb-VAB" secondAttribute="trailing" id="haZ-oi-Jfa"/>
<constraint firstAttribute="trailing" secondItem="M4h-lx-wJ4" secondAttribute="trailing" constant="8" id="wDq-f5-2aI"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="8"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</view>
</subviews>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
<constraints>
<constraint firstItem="1qh-1U-0g1" firstAttribute="top" secondItem="22W-Pg-BGs" secondAttribute="top" constant="25" id="5aA-MU-VhR"/>
<constraint firstItem="FDt-UE-yKg" firstAttribute="centerY" secondItem="pvx-IE-jQQ" secondAttribute="centerY" id="729-Vm-24r"/>
<constraint firstAttribute="trailing" secondItem="TCX-JN-r9B" secondAttribute="trailing" constant="19" id="DIH-n9-8BY"/>
<constraint firstItem="TCX-JN-r9B" firstAttribute="centerY" secondItem="1qh-1U-0g1" secondAttribute="centerY" id="IFW-2s-j7V"/>
<constraint firstItem="R5s-ew-2ma" firstAttribute="centerY" secondItem="1qh-1U-0g1" secondAttribute="centerY" id="N9g-k4-GdM"/>
<constraint firstItem="pvx-IE-jQQ" firstAttribute="centerY" secondItem="1qh-1U-0g1" secondAttribute="centerY" id="PI4-ui-iG5"/>
<constraint firstItem="FDt-UE-yKg" firstAttribute="centerX" secondItem="pvx-IE-jQQ" secondAttribute="centerX" id="TPS-17-unD"/>
<constraint firstItem="5QI-g5-Etm" firstAttribute="top" secondItem="dJ6-LR-vgw" secondAttribute="top" id="VnE-Yk-Fs5"/>
<constraint firstItem="dJ6-LR-vgw" firstAttribute="leading" secondItem="22W-Pg-BGs" secondAttribute="leading" constant="16" id="afz-KP-jxq"/>
<constraint firstItem="5QI-g5-Etm" firstAttribute="bottom" secondItem="dJ6-LR-vgw" secondAttribute="bottom" id="cE5-G9-ELY"/>
<constraint firstAttribute="bottom" secondItem="dJ6-LR-vgw" secondAttribute="bottom" constant="12" id="cu7-kg-F1S"/>
<constraint firstItem="TJG-ml-Bip" firstAttribute="centerX" secondItem="TCX-JN-r9B" secondAttribute="centerX" id="dyH-i4-I9s"/>
<constraint firstItem="dJ6-LR-vgw" firstAttribute="top" secondItem="1qh-1U-0g1" secondAttribute="bottom" constant="25" id="e3D-aw-dQb"/>
<constraint firstItem="TJG-ml-Bip" firstAttribute="centerY" secondItem="TCX-JN-r9B" secondAttribute="centerY" id="fAq-7E-JQR"/>
<constraint firstItem="pvx-IE-jQQ" firstAttribute="leading" secondItem="1nL-zB-s12" secondAttribute="trailing" constant="12" id="gvw-jh-Rfk"/>
<constraint firstItem="1qh-1U-0g1" firstAttribute="leading" secondItem="22W-Pg-BGs" secondAttribute="leading" constant="19" id="h6D-gY-uge"/>
<constraint firstItem="1nL-zB-s12" firstAttribute="leading" secondItem="1qh-1U-0g1" secondAttribute="trailing" constant="12" id="tfl-1O-cAo"/>
<constraint firstAttribute="trailing" secondItem="5QI-g5-Etm" secondAttribute="trailing" constant="19" id="tt7-w6-uG8"/>
<constraint firstItem="1nL-zB-s12" firstAttribute="centerY" secondItem="1qh-1U-0g1" secondAttribute="centerY" id="vIW-PX-cda"/>
<constraint firstItem="R5s-ew-2ma" firstAttribute="centerX" secondItem="1qh-1U-0g1" secondAttribute="centerX" id="xP7-mU-bAf"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="8"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</view>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="PHh-tS-kNh">
<rect key="frame" x="27" y="412" width="258" height="42"/>
<color key="backgroundColor" red="0.22745098039215686" green="0.73725490196078436" blue="0.42745098039215684" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="42" id="4KY-On-BUi"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" title="确认">
<color key="titleColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="21"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
<connections>
<action selector="commitAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="mL0-U7-wQJ"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
<constraints>
<constraint firstItem="22W-Pg-BGs" firstAttribute="top" secondItem="r7a-Qi-IKE" secondAttribute="bottom" constant="8" id="33m-VS-2sZ"/>
<constraint firstAttribute="bottom" secondItem="0pu-br-WLc" secondAttribute="bottom" id="4e3-Y4-Tac"/>
<constraint firstAttribute="trailing" secondItem="PHh-tS-kNh" secondAttribute="trailing" constant="27" id="6W3-Sf-nfN"/>
<constraint firstItem="Cey-rm-4VM" firstAttribute="centerX" secondItem="bjS-Eu-Wht" secondAttribute="centerX" id="8p7-Yq-Bsl"/>
<constraint firstItem="22W-Pg-BGs" firstAttribute="trailing" secondItem="r7a-Qi-IKE" secondAttribute="trailing" id="9hR-zr-C7I"/>
<constraint firstItem="0pu-br-WLc" firstAttribute="top" secondItem="bjS-Eu-Wht" secondAttribute="top" id="CAS-bj-ppe"/>
<constraint firstItem="PHh-tS-kNh" firstAttribute="leading" secondItem="bjS-Eu-Wht" secondAttribute="leading" constant="27" id="F9D-GW-pPi"/>
<constraint firstAttribute="trailing" secondItem="r7a-Qi-IKE" secondAttribute="trailing" constant="16" id="Irf-7a-IAZ"/>
<constraint firstAttribute="width" constant="312" id="KlA-b8-6yJ"/>
<constraint firstItem="Cey-rm-4VM" firstAttribute="top" secondItem="bjS-Eu-Wht" secondAttribute="top" constant="11" id="MZ1-ir-rFg"/>
<constraint firstAttribute="bottom" secondItem="PHh-tS-kNh" secondAttribute="bottom" constant="16" id="RnS-Jh-Wrf"/>
<constraint firstItem="r7a-Qi-IKE" firstAttribute="leading" secondItem="bjS-Eu-Wht" secondAttribute="leading" constant="16" id="U7n-mt-ov1"/>
<constraint firstItem="PHh-tS-kNh" firstAttribute="top" secondItem="22W-Pg-BGs" secondAttribute="bottom" constant="16" id="Uie-am-bsR"/>
<constraint firstItem="ag3-iq-BzI" firstAttribute="top" secondItem="bjS-Eu-Wht" secondAttribute="top" constant="2" id="Vyo-LV-CcW"/>
<constraint firstItem="0pu-br-WLc" firstAttribute="leading" secondItem="bjS-Eu-Wht" secondAttribute="leading" id="aL1-WV-fhl"/>
<constraint firstItem="22W-Pg-BGs" firstAttribute="leading" secondItem="r7a-Qi-IKE" secondAttribute="leading" id="hEM-xo-DUO"/>
<constraint firstAttribute="trailing" secondItem="ag3-iq-BzI" secondAttribute="trailing" id="oMO-jd-Kff"/>
<constraint firstAttribute="trailing" secondItem="0pu-br-WLc" secondAttribute="trailing" id="tGt-Bl-B7G"/>
<constraint firstAttribute="height" constant="470" id="tsx-66-top"/>
<constraint firstItem="r7a-Qi-IKE" firstAttribute="top" secondItem="Cey-rm-4VM" secondAttribute="bottom" constant="11" id="wJM-pt-KcG"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="10"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</view>
</subviews>
<viewLayoutGuide key="safeArea" id="vUN-kp-3ea"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.29999999999999999" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="bjS-Eu-Wht" firstAttribute="centerY" secondItem="vUN-kp-3ea" secondAttribute="centerY" id="XT7-vk-EsU"/>
<constraint firstItem="bjS-Eu-Wht" firstAttribute="centerX" secondItem="vUN-kp-3ea" secondAttribute="centerX" id="h5o-I1-Iu2"/>
</constraints>
<connections>
<outlet property="bgView" destination="bjS-Eu-Wht" id="7GC-AR-cpg"/>
<outlet property="closeBtn" destination="ag3-iq-BzI" id="a0h-Fk-P2z"/>
<outlet property="commitBtn" destination="PHh-tS-kNh" id="iOS-08-gnl"/>
<outlet property="currentPriceLabel" destination="yoB-8g-xXJ" id="ZmR-gN-kho"/>
</connections>
<point key="canvasLocation" x="139.69465648854961" y="19.718309859154932"/>
</view>
</objects>
<resources>
<image name="body_price_rule_bg" width="312" height="470"/>
<image name="room_upseat_coin" width="16" height="16"/>
<image name="wallet_close" width="11" height="11"/>
<systemColor name="systemBackgroundColor">
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</systemColor>
</resources>
</document>

View File

@@ -45,6 +45,8 @@ typedef NS_ENUM(NSInteger) {
QXMainHeaderOptionTypeWallet = 35,
/// 礼物墙
QXMainHeaderOptionTypeGiftWall = 36,
/// 身价
QXMainHeaderOptionTypeBodyPrice = 37,
}QXMainHeaderOptionType;
@protocol QXMainHeaderViewDelegate <NSObject>

View File

@@ -56,6 +56,11 @@
@property (nonatomic, strong)UILabel *walletMoneyLabel;
@property (nonatomic, strong)UIButton *walletBtn;
@property (nonatomic, strong)UIImageView *bodyPriceBgImageView;
@property (nonatomic, strong)UILabel *bodyPriceBottomLabel;
@property (nonatomic, strong)UILabel *bodyPriceMoneyLabel;
@property (nonatomic, strong)UIButton *bodyPriceBtn;
@property (nonatomic, strong)UIImageView *giftWallBgImageView;
@property (nonatomic, strong)UILabel *giftWallTitleLabel;
@property (nonatomic, strong)UIButton *giftWallBtn;
@@ -240,7 +245,7 @@
self.walletTitleLabel.textColor = RGB16(0x929196);
[self.walletBgView addSubview:self.walletTitleLabel];
CGFloat walletWidth = (self.topBgView.width - 16*3) / 2;
CGFloat walletWidth = (self.topBgView.width - 16*4) / 3;
self.walletBgImageView = [[UIImageView alloc] initWithFrame:CGRectMake(self.topBgView.left, self.walletTitleLabel.bottom+8, walletWidth, 60)];
self.walletBgImageView.backgroundColor = RGB16(0xFFE38E);
[self.walletBgImageView addRoundedCornersWithRadius:8];
@@ -254,15 +259,35 @@
[self.walletBgView addSubview:self.walletBottomLabel];
self.walletMoneyLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.walletBgImageView.left, self.walletBgImageView.top+11, walletWidth, 25)];
self.walletMoneyLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.walletBgImageView.left, self.walletBgImageView.top+11, walletWidth, 27)];
self.walletMoneyLabel.text = @"0";
self.walletMoneyLabel.textAlignment = NSTextAlignmentCenter;
self.walletMoneyLabel.font = [UIFont fontWithName:@"DIN Condensed" size:25];
self.walletMoneyLabel.textColor = RGB16(0x222222);
[self.walletBgView addSubview:self.walletMoneyLabel];
self.bodyPriceBgImageView = [[UIImageView alloc] initWithFrame:CGRectMake(self.walletBgImageView.right+16, self.walletBgImageView.top, walletWidth, self.walletBgImageView.height)];
self.bodyPriceBgImageView.backgroundColor = RGB16(0xFFB68F);
[self.bodyPriceBgImageView addRoundedCornersWithRadius:8];
[self.walletBgView addSubview:self.bodyPriceBgImageView];
self.giftWallBgImageView = [[UIImageView alloc] initWithFrame:CGRectMake(self.walletBgImageView.right+16, self.walletBgImageView.top, walletWidth, self.walletBgImageView.height)];
self.bodyPriceBottomLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.bodyPriceBgImageView.left, self.bodyPriceBgImageView.bottom-14-11, walletWidth, 14)];
self.bodyPriceBottomLabel.text = @"身价";
self.bodyPriceBottomLabel.textAlignment = NSTextAlignmentCenter;
self.bodyPriceBottomLabel.font = [UIFont systemFontOfSize:12];
self.bodyPriceBottomLabel.textColor = RGB16(0x333333);
[self.walletBgView addSubview:self.bodyPriceBottomLabel];
self.bodyPriceMoneyLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.bodyPriceBgImageView.left, self.walletBgImageView.top+11, walletWidth, 27)];
self.bodyPriceMoneyLabel.text = @"1";
self.bodyPriceMoneyLabel.textAlignment = NSTextAlignmentCenter;
self.bodyPriceMoneyLabel.font = [UIFont fontWithName:@"DIN Condensed" size:25];
self.bodyPriceMoneyLabel.textColor = RGB16(0x222222);
[self.walletBgView addSubview:self.bodyPriceMoneyLabel];
self.giftWallBgImageView = [[UIImageView alloc] initWithFrame:CGRectMake(self.bodyPriceBgImageView.right+16, self.walletBgImageView.top, walletWidth, self.walletBgImageView.height)];
self.giftWallBgImageView.backgroundColor = RGB16(0xF1B3FF);
[self.giftWallBgImageView addRoundedCornersWithRadius:8];
[self.walletBgView addSubview:self.giftWallBgImageView];
@@ -281,6 +306,10 @@
self.giftWallBtn = [[UIButton alloc] initWithFrame:self.giftWallBgImageView.frame];
[self.giftWallBtn addTarget:self action:@selector(giftWalltAction) forControlEvents:(UIControlEventTouchUpInside)];
[self.walletBgView addSubview:self.giftWallBtn];
self.bodyPriceBtn = [[UIButton alloc] initWithFrame:self.bodyPriceBgImageView.frame];
[self.bodyPriceBtn addTarget:self action:@selector(bodyPriceAction) forControlEvents:(UIControlEventTouchUpInside)];
[self.walletBgView addSubview:self.bodyPriceBtn];
}
-(CGFloat)getHeight{
return self.walletBgView.bottom+6;
@@ -359,6 +388,12 @@
}
}
-(void)bodyPriceAction{
if (self.delegate && [self.delegate respondsToSelector:@selector(didClickOptionType:)]) {
[self.delegate didClickOptionType:QXMainHeaderOptionTypeBodyPrice];
}
}
-(void)gotoUserHomePageClick{
if (self.delegate && [self.delegate respondsToSelector:@selector(didClickOptionType:)]) {
@@ -367,6 +402,7 @@
}
-(void)setUserModel:(QXUserModel *)userModel{
_userModel = userModel;
self.nameLabel.text = userModel.market_value;
[self.userHeaderView setHeadIcon:userModel.avatar dress:userModel.dress];
[self.userHeaderView.nobilityImageView sd_setImageWithURL:[NSURL URLWithString:userModel.nobility_image]];
if ([userModel.nickname_color isExist]) {

View File

@@ -17,6 +17,8 @@ typedef NS_ENUM(NSInteger) {
QXMineServiceTypeBackpack = 42,
/// 设置
QXMineServiceTypeSetting = 43,
/// 家族
QXMineServiceTypeFamily = 80,
/// 帮助中心
QXMineServiceTypeHelp = 44,
/// 邀请

View File

@@ -165,12 +165,17 @@
md4.icon = @"service_setting";
md4.type = QXMineServiceTypeSetting;
QXServiceModel *md5 = [[QXServiceModel alloc] init];
md5.title = @"家族";
md5.icon = @"service_setting";
md5.type = QXMineServiceTypeFamily;
_serviceArray = [NSMutableArray arrayWithArray:@[
md1,
md2,
md3,
md4,
md5
]];
}
return _serviceArray;

View File

@@ -12,6 +12,7 @@ NS_ASSUME_NONNULL_BEGIN
@interface QXUserHomeHeaderView : UIView
@property (nonatomic,strong)QXUserHomeModel *model;
@property (nonatomic,strong)NSString *userId;
-(void)headerStartPlay;
@end
@interface QXTagImageCell : UICollectionViewCell

View File

@@ -17,8 +17,10 @@
#import "QXUserCpCardView.h"
#import "QXGiftWallViewController.h"
#import "QXHeartBeatSpaceViewController.h"
#import "QXUserHomePageViewController.h"
#import "QXHeartBeatSpaceViewController.h"
@interface QXUserHomeHeaderView()<UICollectionViewDelegate,UICollectionViewDataSource>
@interface QXUserHomeHeaderView()<UICollectionViewDelegate,UICollectionViewDataSource,QXUserCpCardViewDelegate>
//@property (nonatomic,strong) CKShimmerLabel * tempName;
@property (nonatomic,strong) QXSeatHeaderView* headerView;
@property (nonatomic,strong) UIView * whiteBgView;
@@ -57,8 +59,6 @@
self.backgroundColor = [UIColor clearColor];
self.headerView = [[QXSeatHeaderView alloc] initWithFrame:CGRectMake(32, 26, 70, 84)];
[self.headerView addRoundedCornersWithRadius:35];
[self addSubview:self.headerView];
[self.headerView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.mas_equalTo(32);
@@ -264,6 +264,7 @@
[self.whiteBgView addSubview:self.cpDressView];
self.cpCardView = [[QXUserCpCardView alloc] init];
self.cpCardView.delegate = self;
self.cpCardView.hidden = YES;
MJWeakSelf
[self.cpCardView addTapBlock:^(id _Nonnull obj) {
@@ -289,8 +290,15 @@
make.height.mas_equalTo(ScaleWidth(40));
make.top.equalTo(self.cpCardView.mas_bottom).offset(8);
}];
[self.whiteBgView bringSubviewToFront:self.playBtn];
[self bringSubviewToFront:self.followBtn];
}
-(void)headerStartPlay{
[self.headerView playHWDMP4];
[self.cpCardView headerStartPlay];
[self.cpDressView headerStartPlay];
}
-(void)giftWallAction{
QXGiftWallViewController *vc = [[QXGiftWallViewController alloc] init];
vc.userId = self.userId;
@@ -314,6 +322,21 @@
[[QXGlobal shareGlobal] chatWithUserID:self.model.user_id nickname:self.model.nickname avatar:self.model.avatar navagationController:self.navigationController];
}
}
-(void)didClickHeaderViewUserId:(NSString*)userId{
if ([userId isEqualToString:self.userId]) {
return;
}
QXUserHomePageViewController *vc = [[QXUserHomePageViewController alloc] init];
vc.user_id = userId;
[self.viewController.navigationController pushViewController:vc animated:YES];
}
-(void)didClickHeaderCardViewWithUserId:(NSString*)userId{
QXHeartBeatSpaceViewController *vc = [[QXHeartBeatSpaceViewController alloc] init];
vc.userId = userId;
[self.viewController.navigationController pushViewController:vc animated:YES];
}
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
if (collectionView == self.collectionView) {
@@ -335,6 +358,10 @@
}
}
-(void)setUserId:(NSString *)userId{
_userId = userId;
self.cpCardView.userId = self.userId;
}
-(void)setModel:(QXUserHomeModel *)model{
_model = model;
// model.nickname = @"大家好撒客户端撒大厦尽快";

View File

@@ -19,7 +19,11 @@
_model = model;
self.nameLabel.text = model.title;
[self.dressImageView sd_setImageWithURL:[NSURL URLWithString:model.base_image]];
self.timeLabel.text = [NSString stringWithFormat:@"%@%@",model.remaining_day,QXText(@"天")];
if ([model.type isEqualToString:@"12"]) {
self.timeLabel.text = [NSString stringWithFormat:@"x%@",model.num];
}else{
self.timeLabel.text = [NSString stringWithFormat:@"%@%@",model.remaining_day,QXText(@"天")];
}
// if (model.is_using.intValue == 1) {
// self.selecteBtn.selected = NO;
// }else{

View File

@@ -11,21 +11,21 @@
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="gTV-IL-0wX" customClass="QXDressCell">
<rect key="frame" x="0.0" y="0.0" width="254" height="313"/>
<rect key="frame" x="0.0" y="0.0" width="104" height="137"/>
<autoresizingMask key="autoresizingMask"/>
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
<rect key="frame" x="0.0" y="0.0" width="254" height="313"/>
<rect key="frame" x="0.0" y="0.0" width="104" height="137"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="n0W-rO-R0R">
<rect key="frame" x="0.0" y="0.0" width="254" height="313"/>
<rect key="frame" x="0.0" y="0.0" width="104" height="137"/>
<subviews>
<button opaque="NO" userInteractionEnabled="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Gk9-jf-oXA">
<rect key="frame" x="0.0" y="0.0" width="254" height="313"/>
<rect key="frame" x="0.0" y="0.0" width="104" height="137"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
</button>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="i9y-iF-N7k">
<rect key="frame" x="10" y="281" width="234" height="21"/>
<rect key="frame" x="10" y="105" width="84" height="21"/>
<constraints>
<constraint firstAttribute="height" constant="21" id="rrg-mb-mKp"/>
</constraints>
@@ -34,7 +34,7 @@
<nil key="highlightedColor"/>
</label>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="dze-FS-DlP">
<rect key="frame" x="10" y="25" width="234" height="246"/>
<rect key="frame" x="10" y="25" width="84" height="70"/>
</imageView>
</subviews>
<constraints>
@@ -58,9 +58,9 @@
</userDefinedRuntimeAttributes>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Jon-rv-RWs">
<rect key="frame" x="213.66666666666666" y="0.0" width="40.333333333333343" height="15"/>
<rect key="frame" x="63.666666666666657" y="0.0" width="40.333333333333343" height="15"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="gift_number_bg" translatesAutoresizingMaskIntoConstraints="NO" id="acA-Gl-J3f">
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="gift_number_bg" translatesAutoresizingMaskIntoConstraints="NO" id="acA-Gl-J3f">
<rect key="frame" x="0.0" y="0.0" width="40.333333333333336" height="15"/>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="30天" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fQr-Il-R17">
@@ -107,6 +107,6 @@
</collectionViewCell>
</objects>
<resources>
<image name="gift_number_bg" width="35" height="13"/>
<image name="gift_number_bg" width="34" height="16"/>
</resources>
</document>

View File

@@ -0,0 +1,17 @@
//
// QXHeartBeatLevelRuleView.h
// QXLive
//
// Created by 启星 on 2025/11/22.
//
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface QXHeartBeatLevelRuleView : UIView
@property (nonatomic,strong)NSString*rule;
-(void)showInView:(UIView *)view;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,123 @@
//
// QXHeartBeatLevelRuleView.m
// QXLive
//
// Created by on 2025/11/22.
//
#import "QXHeartBeatLevelRuleView.h"
#import <WebKit/WebKit.h>
@interface QXHeartBeatLevelRuleView()
@property(nonatomic,strong)WKWebView *contentWebView;
@property(nonatomic,strong)UIView* bgView;
@property(nonatomic,strong)UIButton* closeBtn;
@end
@implementation QXHeartBeatLevelRuleView
- (instancetype)init
{
self = [super init];
if (self) {
self.frame = CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
[self initSubviews];
}
return self;
}
-(void)initSubviews{
self.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.3];
self.bgView = [[UIView alloc] initWithFrame:CGRectMake((self.width-ScaleWidth(312))/2, (self.height-ScaleWidth(492))/2-40, ScaleWidth(312), ScaleWidth(492))];
[self.bgView addRoundedCornersWithRadius:16 byRoundingCorners:(UIRectCornerTopLeft|UIRectCornerTopRight)];
[self addSubview:self.bgView];
[self.bgView addSubview:self.contentWebView];
self.closeBtn = [[UIButton alloc] initWithFrame:CGRectMake((self.width-40)/2, self.bgView.bottom+10, 40, 40)];
[self.closeBtn setBackgroundImage:[UIImage imageNamed:@"home_white_close"] forState:(UIControlStateNormal)];
[self.closeBtn addTarget:self action:@selector(closeAction) forControlEvents:(UIControlEventTouchUpInside)];
[self addSubview:self.closeBtn];
[self.closeBtn mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.height.mas_equalTo(40);
make.centerX.equalTo(self);
make.top.mas_equalTo(self.bgView.bottom+10);
}];
}
-(void)setRule:(NSString *)rule{
_rule = rule;
[self loadData];
}
- (void)loadData {
NSURL* url=[NSURL URLWithString:self.rule];
NSURLRequest *request =[NSURLRequest requestWithURL:url];
[self.contentWebView loadRequest:request];
}
-(void)closeAction{
[self hide];
}
#pragma mark - getters and setters
- (WKWebView *)contentWebView {
if (!_contentWebView) {
//
WKWebViewConfiguration * configuration = [[WKWebViewConfiguration alloc]init];
//
configuration.selectionGranularity = YES;
// webpr
configuration.processPool = [[WKProcessPool alloc] init];
//, jsoc(OCURL)
WKUserContentController * UserContentController = [[WKUserContentController alloc]init];
//
configuration.suppressesIncrementalRendering = NO;
//
configuration.preferences.javaScriptEnabled = YES;
configuration.preferences.javaScriptCanOpenWindowsAutomatically = YES;
configuration.userContentController = UserContentController;
// iOS9iOS8
if ([[UIDevice currentDevice].systemVersion floatValue] >= 9.0) {
//
configuration.allowsAirPlayForMediaPlayback = YES;
// 线
configuration.allowsInlineMediaPlayback = YES;
// NOios8
_contentWebView.allowsBackForwardNavigationGestures = YES;
}
_contentWebView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, self.bgView.width, self.bgView.height) configuration:configuration];
_contentWebView.backgroundColor = UIColor.clearColor;
[_contentWebView addRoundedCornersWithRadius:6];
_contentWebView.opaque = NO;
//
[_contentWebView sizeToFit];
_contentWebView.scrollView.showsVerticalScrollIndicator = NO;
_contentWebView.scrollView.backgroundColor = [UIColor clearColor];
_contentWebView.scrollView.bounces = NO;
//
}
return _contentWebView;
}
-(void)showInView:(UIView *)view{
self.bgView.y = -SCREEN_HEIGHT;
[view addSubview:self];
[UIView animateWithDuration:0.3 animations:^{
self.bgView.y = (self.height-ScaleWidth(492))/2-40;
} completion:^(BOOL finished) {
self.closeBtn.hidden = NO;
}];
}
-(void)hide{
self.closeBtn.hidden = YES;
[UIView animateWithDuration:0.3 animations:^{
self.bgView.y = SCREEN_HEIGHT;
} completion:^(BOOL finished) {
[self removeFromSuperview];
}];
}
@end

View File

@@ -0,0 +1,22 @@
//
// QXHeartBeatSpaceRecordCell.h
// QXLive
//
// Created by 启星 on 2025/11/22.
//
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface QXHeartBeatSpaceRecordCell : UITableViewCell
@property (weak, nonatomic) IBOutlet QXSeatHeaderView *headerView;
@property (weak, nonatomic) IBOutlet UILabel *nameLabel;
@property (weak, nonatomic) IBOutlet UILabel *timeLabel;
@property (weak, nonatomic) IBOutlet UILabel *contentLabel;
@property (strong, nonatomic)QXUserHeartBeatSpaceLogModel *model;
@property (strong, nonatomic)NSString *userId;
+(instancetype)cellWithTableView:(UITableView *)tableView;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,59 @@
//
// QXHeartBeatSpaceRecordCell.m
// QXLive
//
// Created by on 2025/11/22.
//
#import "QXHeartBeatSpaceRecordCell.h"
@implementation QXHeartBeatSpaceRecordCell
+(instancetype)cellWithTableView:(UITableView *)tableView{
static NSString *cellId = @"QXHeartBeatSpaceRecordCell";
QXHeartBeatSpaceRecordCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
if (!cell) {
cell = [[NSBundle mainBundle] loadNibNamed:cellId owner:nil options:nil].lastObject;
cell.backgroundColor = [UIColor clearColor];
cell.contentView.backgroundColor = [UIColor clearColor];
}
return cell;
}
-(void)setUserId:(NSString *)userId{
_userId = userId;
}
-(void)setModel:(QXUserHeartBeatSpaceLogModel *)model{
_model = model;
[self.headerView setHeadIcon:model.from_user_info.avatar dress:model.from_user_info.dress];
NSDate *date = [NSDate dateWithTimeIntervalSince1970:model.createtime.longLongValue]; //,1000 , 1000
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
NSString*time = [formatter stringFromDate:date];
self.timeLabel.text = time;
self.nameLabel.text = model.from_user_info.nickname;
UIColor *nameColor = RGB16(0xFF53CC);
UIColor *contentNameColor = RGB16(0x4A89FF);
NSString *content = [NSString stringWithFormat:@"%@",model.remark];
NSMutableAttributedString *attr = [[NSMutableAttributedString alloc] initWithString:content];
if ([model.from_user_id isEqualToString:self.userId] ) {
self.nameLabel.textColor = nameColor;
[attr yy_setColor:contentNameColor range:[content rangeOfString:model.to_user_info.nickname]];
}else{
self.nameLabel.textColor = contentNameColor;
[attr yy_setColor:nameColor range:[content rangeOfString:model.to_user_info.nickname]];
}
self.contentLabel.attributedText = attr;
}
- (void)awakeFromNib {
[super awakeFromNib];
// Initialization code
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
@end

View File

@@ -0,0 +1,86 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23504" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<device id="retina6_12" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23506"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<tableViewCell contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" rowHeight="307" id="KGk-i7-Jjw" customClass="QXHeartBeatSpaceRecordCell">
<rect key="frame" x="0.0" y="0.0" width="516" height="307"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">
<rect key="frame" x="0.0" y="0.0" width="516" height="307"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="kDB-P0-eAc" customClass="QXSeatHeaderView">
<rect key="frame" x="16" y="16" width="48" height="48"/>
<constraints>
<constraint firstAttribute="width" constant="48" id="2z8-8O-4vb"/>
<constraint firstAttribute="height" constant="48" id="aX5-8B-RZa"/>
</constraints>
</view>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ZRa-V2-B3h">
<rect key="frame" x="72" y="20" width="35.333333333333343" height="20"/>
<constraints>
<constraint firstAttribute="height" constant="20" id="2S3-wj-dYF"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<color key="textColor" red="1" green="0.32549019607843138" blue="0.80000000000000004" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<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="uCL-M4-5Hx">
<rect key="frame" x="72" y="68" width="408" height="223"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="3qb-wi-G90">
<rect key="frame" x="16" y="306" width="484" height="1"/>
<color key="backgroundColor" red="0.81568627450980391" green="0.81568627450980391" blue="0.81568627450980391" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="1" id="wlx-KN-3DQ"/>
</constraints>
</view>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="AYF-oO-8tq">
<rect key="frame" x="72" y="43" width="428" height="17"/>
<constraints>
<constraint firstAttribute="height" constant="17" id="B9l-Hd-p4f"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<constraints>
<constraint firstAttribute="trailing" secondItem="3qb-wi-G90" secondAttribute="trailing" constant="16" id="91k-0N-Wpr"/>
<constraint firstItem="ZRa-V2-B3h" firstAttribute="top" secondItem="kDB-P0-eAc" secondAttribute="top" constant="4" id="Bny-jR-cys"/>
<constraint firstAttribute="bottom" secondItem="uCL-M4-5Hx" secondAttribute="bottom" constant="16" id="CrK-CK-4Hs"/>
<constraint firstItem="uCL-M4-5Hx" firstAttribute="leading" secondItem="ZRa-V2-B3h" secondAttribute="leading" id="P89-5y-Jqq"/>
<constraint firstAttribute="trailingMargin" secondItem="uCL-M4-5Hx" secondAttribute="trailing" constant="16" id="VUI-pF-Aev"/>
<constraint firstItem="kDB-P0-eAc" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="16" id="Xor-lq-pkP"/>
<constraint firstItem="uCL-M4-5Hx" firstAttribute="top" secondItem="AYF-oO-8tq" secondAttribute="bottom" constant="8" id="XuR-uq-ICR"/>
<constraint firstAttribute="bottom" secondItem="3qb-wi-G90" secondAttribute="bottom" id="YpW-IW-hTe"/>
<constraint firstAttribute="trailing" secondItem="AYF-oO-8tq" secondAttribute="trailing" constant="16" id="fAd-RQ-39L"/>
<constraint firstItem="kDB-P0-eAc" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="16" id="h9b-b5-5UI"/>
<constraint firstItem="ZRa-V2-B3h" firstAttribute="leading" secondItem="kDB-P0-eAc" secondAttribute="trailing" constant="8" id="hLc-EK-j17"/>
<constraint firstItem="AYF-oO-8tq" firstAttribute="leading" secondItem="ZRa-V2-B3h" secondAttribute="leading" id="jhq-zF-K72"/>
<constraint firstItem="3qb-wi-G90" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="16" id="sub-hr-L9S"/>
<constraint firstItem="AYF-oO-8tq" firstAttribute="bottom" secondItem="kDB-P0-eAc" secondAttribute="bottom" constant="-4" id="u8f-kW-vSK"/>
</constraints>
</tableViewCellContentView>
<viewLayoutGuide key="safeArea" id="aW0-zy-SZf"/>
<connections>
<outlet property="contentLabel" destination="uCL-M4-5Hx" id="Tco-Mw-PN0"/>
<outlet property="headerView" destination="kDB-P0-eAc" id="qMe-nZ-45F"/>
<outlet property="nameLabel" destination="ZRa-V2-B3h" id="uYk-gZ-QRb"/>
<outlet property="timeLabel" destination="AYF-oO-8tq" id="WLP-Ta-oye"/>
</connections>
<point key="canvasLocation" x="287.02290076335879" y="112.32394366197184"/>
</tableViewCell>
</objects>
</document>

View File

@@ -119,6 +119,7 @@
-(void)setUserId:(NSString *)userId{
_userId = userId;
self.cpCardView.userId = userId;
self.page = 1;
[self getList];
}
@@ -159,6 +160,7 @@
QXMoreIntimateViewController *vc = [[QXMoreIntimateViewController alloc] init];
vc.userId = self.userId;
vc.relation_id = md.relation_list.firstObject.relation_id;
vc.relation_name = md.relation_name;
[self.viewController.navigationController pushViewController:vc animated:YES];
}
@@ -175,11 +177,13 @@
if (md.relation_list.count > 1) {
QXIntimateListCell*cell = [QXIntimateListCell cellWithTableView:tableView];
QXRoomBestFriendListModel *md = self.dataArray[indexPath.section];
cell.userId = self.userId;
cell.model = md;
return cell;
}else{
MJWeakSelf
QXIntimateMoreListCell *cell = [QXIntimateMoreListCell cellWithTableView:tableView];
cell.userId = self.userId;
cell.model = md.relation_list.firstObject;
cell.deleteSuccessBlock = ^(QXRelationshipListModel * _Nonnull model) {
weakSelf.page = 1;
@@ -235,7 +239,7 @@
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
QXRoomBestFriendListModel *md = self.dataArray[indexPath.section];
if (md.relation_list.count > 1) {
if (md.relation_list.count == 1) {
return ScaleWidth(92)+18;
}else{
if (md.relation_list.count == 0) {

View File

@@ -6,11 +6,13 @@
//
#import <UIKit/UIKit.h>
#import "QXUserCpCardView.h"
NS_ASSUME_NONNULL_BEGIN
@interface QXIntimateCpCell : UITableViewCell
@property (nonatomic,strong)QXUserCpInfoModel *model;
@property (nonatomic,strong)NSString *userId;
@property (nonatomic,weak)id<QXUserCpCardViewDelegate>delegate;
+(instancetype)cellWithTableView:(UITableView *)tableView;
@end

View File

@@ -6,8 +6,8 @@
//
#import "QXIntimateCpCell.h"
#import "QXUserCpCardView.h"
@interface QXIntimateCpCell()
@interface QXIntimateCpCell()<QXUserCpCardViewDelegate>
@property (nonatomic,strong)QXUserCpCardView *cardView;
@end
@implementation QXIntimateCpCell
@@ -34,9 +34,13 @@
_model = model;
self.cardView.model = model;
}
-(void)setUserId:(NSString *)userId{
_userId = userId;
self.cardView.userId = self.userId;
}
-(void)initSubviews{
self.cardView = [[QXUserCpCardView alloc] init];
self.cardView.delegate = self;
[self.contentView addSubview:self.cardView];
[self.cardView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.mas_equalTo(24);
@@ -44,6 +48,17 @@
make.top.bottom.equalTo(self.contentView);
}];
}
-(void)didClickHeaderCardViewWithUserId:(NSString *)userId{
if (self.delegate && [self.delegate respondsToSelector:@selector(didClickHeaderCardViewWithUserId:)]) {
[self.delegate didClickHeaderCardViewWithUserId:userId];
}
}
-(void)didClickHeaderViewUserId:(NSString *)userId{
if (self.delegate && [self.delegate respondsToSelector:@selector(didClickHeaderViewUserId:)]) {
[self.delegate didClickHeaderViewUserId:userId];
}
}
- (void)awakeFromNib {
[super awakeFromNib];
// Initialization code

View File

@@ -11,6 +11,7 @@ NS_ASSUME_NONNULL_BEGIN
@interface QXIntimateListCell : UITableViewCell
@property (nonatomic,strong)QXRoomBestFriendListModel *model;
@property (nonatomic,strong)NSString *userId;
+(instancetype)cellWithTableView:(UITableView *)tableView;
@end

View File

@@ -7,7 +7,7 @@
#import "QXIntimateListCell.h"
#import "QXIntimateUserCell.h"
#import "QXUserHomePageViewController.h"
@interface QXIntimateListCell()<UICollectionViewDataSource,UICollectionViewDelegate>
@property (nonatomic,strong)UICollectionView *collectionView;
@end
@@ -68,9 +68,22 @@
}
-(__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
QXIntimateUserCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"QXIntimateUserCell" forIndexPath:indexPath];
cell.userId = self.userId;
cell.model = self.model.relation_list[indexPath.row];
return cell;
}
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
QXRelationshipListModel *md = self.model.relation_list[indexPath.row];
NSString *userId = @"";
if ([md.user_id1 isEqualToString:self.userId]) {
userId = md.user_id2;
}else{
userId = md.user_id1;
}
QXUserHomePageViewController *vc = [[QXUserHomePageViewController alloc] init];
vc.user_id = userId;
[self.viewController.navigationController pushViewController:vc animated:YES];
}
- (void)awakeFromNib {
[super awakeFromNib];
// Initialization code

View File

@@ -8,7 +8,12 @@
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@protocol QXIntimateMoreListCellDelegate <NSObject>
@optional
-(void)didClickHeaderWithUserId:(NSString*)userId;
@end
@interface QXIntimateMoreListCell : UITableViewCell
@property (weak, nonatomic) IBOutlet QXSeatHeaderView *leftHeaderView;
@property (weak, nonatomic) IBOutlet UIImageView *leftSexImageView;
@@ -18,8 +23,10 @@ NS_ASSUME_NONNULL_BEGIN
@property (weak, nonatomic) IBOutlet UILabel *rightNameLabel;
@property (weak, nonatomic) IBOutlet UILabel *timeLabel;
@property (nonatomic,strong)QXRelationshipListModel *model;
@property (nonatomic,strong)NSString *userId;
@property (nonatomic,copy)void(^topSuccessBlock)(QXRelationshipListModel*model);
@property (nonatomic,copy)void(^deleteSuccessBlock)(QXRelationshipListModel*model);
@property (nonatomic,weak)id<QXIntimateMoreListCellDelegate>delegate;
+(instancetype)cellWithTableView:(UITableView *)tableView;
@end

View File

@@ -67,25 +67,41 @@
}];
}
- (IBAction)leftAction:(id)sender {
if (self.delegate && [self.delegate respondsToSelector:@selector(didClickHeaderWithUserId:)]) {
[self.delegate didClickHeaderWithUserId:self.userId];
}
}
- (IBAction)rightAction:(id)sender {
NSString *userId = @"";
if ([self.model.user_id1 isEqualToString:self.userId]) {
userId = self.model.user_id2;
}else{
userId = self.model.user_id1;
}
if (self.delegate && [self.delegate respondsToSelector:@selector(didClickHeaderWithUserId:)]) {
[self.delegate didClickHeaderWithUserId:userId];
}
}
-(void)setModel:(QXRelationshipListModel *)model{
_model = model;
if ([model.user_id1 isEqualToString:QXGlobal.shareGlobal.loginModel.user_id]) {
[self.leftHeaderView setHeadIcon:model.avatar2 dress:@""];
self.leftNameLabel.text = model.nickname2;
self.leftSexImageView.image = [UIImage imageNamed:model.sex2.intValue == 1?@"user_sex_boy":@"user_sex_girl"];
[self.rightHeaderView setHeadIcon:model.avatar1 dress:@""];
self.rightNameLabel.text = model.nickname1;
self.rightSexImageView.image = [UIImage imageNamed:model.sex1.intValue == 1?@"user_sex_boy":@"user_sex_girl"];
}else{
if ([model.user_id1 isEqualToString:self.userId]) {
[self.leftHeaderView setHeadIcon:model.avatar1 dress:@""];
self.leftNameLabel.text = model.nickname1;
self.leftSexImageView.image = [UIImage imageNamed:model.sex1.intValue == 1?@"user_sex_boy":@"user_sex_girl"];
[self.rightHeaderView setHeadIcon:model.avatar2 dress:@""];
self.rightNameLabel.text = model.nickname2;
self.rightSexImageView.image = [UIImage imageNamed:model.sex2.intValue == 1?@"user_sex_boy":@"user_sex_girl"];
}else{
[self.leftHeaderView setHeadIcon:model.avatar2 dress:@""];
self.leftNameLabel.text = model.nickname2;
self.leftSexImageView.image = [UIImage imageNamed:model.sex2.intValue == 1?@"user_sex_boy":@"user_sex_girl"];
[self.rightHeaderView setHeadIcon:model.avatar1 dress:@""];
self.rightNameLabel.text = model.nickname1;
self.rightSexImageView.image = [UIImage imageNamed:model.sex2.intValue == 1?@"user_sex_boy":@"user_sex_girl"];
}
NSTimeInterval currentTime = [[NSDate date] timeIntervalSince1970];
long long milliseconds = (long long)(currentTime);

View File

@@ -30,6 +30,19 @@
<constraint firstAttribute="width" constant="50" id="f4E-eT-Fu8"/>
</constraints>
</view>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="eAs-09-73J">
<rect key="frame" x="46.666666666666671" y="66" width="33" height="16"/>
<fontDescription key="fontDescription" type="system" pointSize="13"/>
<color key="textColor" red="0.36078431372549019" green="0.16470588235294117" blue="0.44313725490196076" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="xap-Up-DHk">
<rect key="frame" x="38" y="12" width="50" height="70"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<connections>
<action selector="leftAction:" destination="KGk-i7-Jjw" eventType="touchUpInside" id="r31-OZ-CWl"/>
</connections>
</button>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="fJj-mx-2yM">
<rect key="frame" x="72" y="46" width="16" height="16"/>
<constraints>
@@ -70,35 +83,44 @@
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="eAs-09-73J">
<rect key="frame" x="46.666666666666671" y="66" width="33" height="16"/>
<fontDescription key="fontDescription" type="system" pointSize="13"/>
<color key="textColor" red="0.36078431372549019" green="0.16470588235294117" blue="0.44313725490196076" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="tuv-zg-sBW">
<rect key="frame" x="343.66666666666669" y="66" width="33" height="16"/>
<fontDescription key="fontDescription" type="system" pointSize="13"/>
<color key="textColor" red="0.36078431372549019" green="0.16470588235294117" blue="0.44313725490196076" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="SsY-uu-WFL">
<rect key="frame" x="335" y="12" width="50" height="70"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<connections>
<action selector="rightAction:" destination="KGk-i7-Jjw" eventType="touchUpInside" id="c6p-5f-wxW"/>
</connections>
</button>
</subviews>
<constraints>
<constraint firstItem="50s-uU-EKD" firstAttribute="centerY" secondItem="pS6-S4-a2G" secondAttribute="centerY" id="5g4-vp-EYv"/>
<constraint firstItem="SsY-uu-WFL" firstAttribute="top" secondItem="50s-uU-EKD" secondAttribute="top" id="8be-wg-JP2"/>
<constraint firstItem="8wc-ZY-rQa" firstAttribute="top" secondItem="dAK-uZ-bVb" secondAttribute="bottom" constant="5" id="8rk-dg-kaQ"/>
<constraint firstItem="fJj-mx-2yM" firstAttribute="trailing" secondItem="pS6-S4-a2G" secondAttribute="trailing" id="BEj-jg-gAB"/>
<constraint firstItem="dAK-uZ-bVb" firstAttribute="top" secondItem="9uF-c2-o0x" secondAttribute="top" constant="24" id="D9p-BA-KBw"/>
<constraint firstItem="6nc-bo-ejr" firstAttribute="bottom" secondItem="50s-uU-EKD" secondAttribute="bottom" id="FGe-n1-Wks"/>
<constraint firstItem="pS6-S4-a2G" firstAttribute="leading" secondItem="9uF-c2-o0x" secondAttribute="leading" constant="38" id="H5c-Mz-Qma"/>
<constraint firstItem="SsY-uu-WFL" firstAttribute="leading" secondItem="50s-uU-EKD" secondAttribute="leading" id="Rl2-c0-BBe"/>
<constraint firstItem="dAK-uZ-bVb" firstAttribute="centerX" secondItem="9uF-c2-o0x" secondAttribute="centerX" id="VG0-8q-Lrq"/>
<constraint firstAttribute="trailing" secondItem="50s-uU-EKD" secondAttribute="trailing" constant="38" id="Wh8-QI-j4t"/>
<constraint firstItem="xap-Up-DHk" firstAttribute="leading" secondItem="pS6-S4-a2G" secondAttribute="leading" id="YQL-gI-xBB"/>
<constraint firstItem="pS6-S4-a2G" firstAttribute="top" secondItem="9uF-c2-o0x" secondAttribute="top" constant="12" id="YtX-oa-Z5o"/>
<constraint firstItem="SsY-uu-WFL" firstAttribute="bottom" secondItem="tuv-zg-sBW" secondAttribute="bottom" id="a00-qT-gYV"/>
<constraint firstItem="fJj-mx-2yM" firstAttribute="bottom" secondItem="pS6-S4-a2G" secondAttribute="bottom" id="a5l-4I-UsC"/>
<constraint firstItem="tuv-zg-sBW" firstAttribute="centerX" secondItem="50s-uU-EKD" secondAttribute="centerX" id="eA4-hx-xId"/>
<constraint firstItem="eAs-09-73J" firstAttribute="top" secondItem="pS6-S4-a2G" secondAttribute="bottom" constant="4" id="inp-kG-exH"/>
<constraint firstItem="6nc-bo-ejr" firstAttribute="trailing" secondItem="50s-uU-EKD" secondAttribute="trailing" id="j7A-eO-KSJ"/>
<constraint firstItem="xap-Up-DHk" firstAttribute="top" secondItem="pS6-S4-a2G" secondAttribute="top" id="k1J-S0-BPd"/>
<constraint firstItem="SsY-uu-WFL" firstAttribute="trailing" secondItem="50s-uU-EKD" secondAttribute="trailing" id="rQE-om-5xf"/>
<constraint firstItem="eAs-09-73J" firstAttribute="centerX" secondItem="pS6-S4-a2G" secondAttribute="centerX" id="smC-jH-4iI"/>
<constraint firstItem="xap-Up-DHk" firstAttribute="bottom" secondItem="eAs-09-73J" secondAttribute="bottom" id="ssk-yf-L3c"/>
<constraint firstItem="8wc-ZY-rQa" firstAttribute="centerX" secondItem="9uF-c2-o0x" secondAttribute="centerX" id="uKd-PA-s9w"/>
<constraint firstItem="xap-Up-DHk" firstAttribute="trailing" secondItem="pS6-S4-a2G" secondAttribute="trailing" id="v5j-a8-69s"/>
<constraint firstItem="tuv-zg-sBW" firstAttribute="top" secondItem="50s-uU-EKD" secondAttribute="bottom" constant="4" id="yjp-7F-Gwe"/>
</constraints>
</view>

View File

@@ -14,6 +14,7 @@ NS_ASSUME_NONNULL_BEGIN
@property (weak, nonatomic) IBOutlet UILabel *nameLabel;
@property (weak, nonatomic) IBOutlet QXSeatHeaderView *headerView;
@property (weak, nonatomic) IBOutlet UIImageView *sexImageView;
@property (nonatomic,strong)NSString* userId;
@property (nonatomic,strong)QXRelationshipListModel *model;
@end

View File

@@ -10,7 +10,7 @@
@implementation QXIntimateUserCell
-(void)setModel:(QXRelationshipListModel *)model{
_model = model;
if ([model.user_id1 isEqualToString:QXGlobal.shareGlobal.loginModel.user_id]) {
if ([model.user_id1 isEqualToString:self.userId]) {
[self.headerView setHeadIcon:model.avatar2 dress:@""];
self.nameLabel.text = model.nickname2;
self.sexImageView.image = [UIImage imageNamed:model.sex2.intValue == 1?@"user_sex_boy":@"user_sex_girl"];
@@ -19,9 +19,15 @@
self.nameLabel.text = model.nickname1;
self.sexImageView.image = [UIImage imageNamed:model.sex1.intValue == 1?@"user_sex_boy":@"user_sex_girl"];
}
self.timeLabel.text = [NSString getTimeWithSecond:model.end_time.longLongValue];
NSTimeInterval currentTime = [[NSDate date] timeIntervalSince1970];
long long milliseconds = (long long)(currentTime);
NSInteger time = model.end_time.longLongValue - milliseconds;
self.timeLabel.text = [NSString stringWithFormat:@" %@ ",[NSString getTimeWithSecond:time]];
}
-(void)setUserId:(NSString *)userId{
_userId = userId;
}
- (void)awakeFromNib {
[super awakeFromNib];
// Initialization code

View File

@@ -0,0 +1,29 @@
//
// QXFamilyMemberCell.h
// QXLive
//
// Created by 启星 on 2025/11/26.
//
#import <UIKit/UIKit.h>
#import "QXFamilyModel.h"
NS_ASSUME_NONNULL_BEGIN
@interface QXFamilyMemberCell : UITableViewCell
@property (weak, nonatomic) IBOutlet QXSeatHeaderView *headerView;
@property (weak, nonatomic) IBOutlet UICollectionView *collectionView;
@property (weak, nonatomic) IBOutlet UICollectionViewFlowLayout *flowLayout;
@property (weak, nonatomic) IBOutlet UILabel *dayLabel;
@property (weak, nonatomic) IBOutlet UILabel *nameLabel;
@property (weak, nonatomic) IBOutlet UILabel *timesLabel;
@property (weak, nonatomic) IBOutlet UIButton *priceBtn;
@property (weak, nonatomic) IBOutlet UILabel *onlineLabel;
@property (weak, nonatomic) IBOutlet UIButton *todayPriceBtn;
@property (weak, nonatomic) IBOutlet UIButton *yestodayPriceBtn;
@property (weak, nonatomic) IBOutlet UIButton *continueBtn;
@property (strong, nonatomic) QXFamilyMemberModel *model;
+(instancetype)cellWithTableView:(UITableView *)tableView;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,82 @@
//
// QXFamilyMemberCell.m
// QXLive
//
// Created by on 2025/11/26.
//
#import "QXFamilyMemberCell.h"
#import "QXUserHomeHeaderView.h"
#import "QXCustomAlertView.h"
@interface QXFamilyMemberCell()<UICollectionViewDataSource,UICollectionViewDelegate>
@end
@implementation QXFamilyMemberCell
+(instancetype)cellWithTableView:(UITableView *)tableView{
static NSString *cellId = @"QXFamilyMemberCell";
QXFamilyMemberCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
if (!cell) {
cell = [[NSBundle mainBundle] loadNibNamed:cellId owner:nil options:nil].lastObject;
cell.flowLayout.itemSize = CGSizeMake(UserIconWidth, UserIconHeight);
cell.flowLayout.minimumLineSpacing = 7;
cell.flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
cell.collectionView.dataSource = cell;
cell.collectionView.delegate = cell;
cell.collectionView.backgroundColor = UIColor.clearColor;
[cell.collectionView registerClass:[QXTagImageCell class] forCellWithReuseIdentifier:@"QXTagImageCell"];
cell.backgroundColor = [UIColor clearColor];
cell.contentView.backgroundColor = [UIColor clearColor];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
return cell;
}
- (void)awakeFromNib {
[super awakeFromNib];
// Initialization code
}
-(void)setModel:(QXFamilyMemberModel *)model{
_model = model;
[self.headerView setHeadIcon:model.nickname dress:model.dress];
[self.headerView.nobilityImageView sd_setImageWithURL:[NSURL URLWithString:model.nobility_image]];
self.dayLabel.text = [NSString stringWithFormat:@"剩余租期:%@",model.end_day];
self.timesLabel.text = [NSString stringWithFormat:@"免费续约次数:%@",model.free_renewal];
self.nameLabel.text = model.nickname;
[self.todayPriceBtn setTitle:model.today_earnings forState:(UIControlStateNormal)];
[self.yestodayPriceBtn setTitle:model.yesterday_earnings forState:(UIControlStateNormal)];
[self.priceBtn setTitle:model.market_value forState:(UIControlStateNormal)];
self.onlineLabel.text = model.is_online==1?@"当前在线":@"当前离线";
self.continueBtn.hidden = model.is_show_sign.intValue==1?NO:YES;
}
- (IBAction)continueAction:(id)sender {
QXCustomAlertView *al = [[QXCustomAlertView alloc] init];
al.title = @"续约提示";
al.message = @"尊敬的用户:  您的徒弟【夏沫】当前为首次签约的 免费续约期。续约后徒弟合约将延长7天您剩余的免费续约次数1次";
al.cancleTitle = @"取消";
al.commitTitle = @"确认续约";
al.isFromController = YES;
al.cancelBlock = ^{
[[QXGlobal shareGlobal] hideViewBlock:nil];
};
al.commitBlock = ^{
[[QXGlobal shareGlobal] hideViewBlock:nil];
};
[QXGlobal.shareGlobal showView:al popType:(PopViewTypeTopToCenter) tapDismiss:NO finishBlock:nil];
// [al showInView:self.viewController.view title:@"续约提示" message:@"尊敬的用户:  您的徒弟【夏沫】当前为首次签约的 免费续约期。续约后徒弟合约将延长7天您剩余的免费续约次数1次" cancleTitle:@"取消" commitTitle:@"确认续约"];
}
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
if (self.model==nil) {
return 0;
}
return self.model.icon.count;
}
-(__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
QXTagImageCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"QXTagImageCell" forIndexPath:indexPath];
cell.imageUrl = self.model.icon[indexPath.row];
return cell;
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
@end

View File

@@ -0,0 +1,267 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23504" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<device id="retina6_12" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23506"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" rowHeight="178" id="KGk-i7-Jjw" customClass="QXFamilyMemberCell">
<rect key="frame" x="0.0" y="0.0" width="375" height="178"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">
<rect key="frame" x="0.0" y="0.0" width="375" height="178"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="iH0-Pj-t8s">
<rect key="frame" x="16" y="6" width="343" height="166"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="family_top_member_bg" translatesAutoresizingMaskIntoConstraints="NO" id="Msn-nc-t9D">
<rect key="frame" x="0.0" y="0.0" width="343" height="166"/>
</imageView>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="uXg-p7-J2S" customClass="QXSeatHeaderView">
<rect key="frame" x="18" y="12" width="52" height="68"/>
<constraints>
<constraint firstAttribute="height" constant="68" id="bCB-eE-Zr3"/>
<constraint firstAttribute="width" constant="52" id="h5x-rL-px2"/>
</constraints>
</view>
<collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" dataMode="none" translatesAutoresizingMaskIntoConstraints="NO" id="Xpt-NC-KbR">
<rect key="frame" x="90" y="14" width="242" height="19"/>
<constraints>
<constraint firstAttribute="height" constant="19" id="mpP-Tm-mjr"/>
</constraints>
<collectionViewFlowLayout key="collectionViewLayout" scrollDirection="horizontal" minimumLineSpacing="10" minimumInteritemSpacing="10" id="ErA-Km-MvK">
<size key="itemSize" width="128" height="128"/>
<size key="headerReferenceSize" width="0.0" height="0.0"/>
<size key="footerReferenceSize" width="0.0" height="0.0"/>
<inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
</collectionViewFlowLayout>
<connections>
<outlet property="dataSource" destination="-1" id="neF-wi-DOJ"/>
<outlet property="delegate" destination="-1" id="JgI-Be-tW3"/>
</connections>
</collectionView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="剩余租期5天" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3c8-yw-ZcY">
<rect key="frame" x="90" y="43" width="80.666666666666686" height="14.333333333333336"/>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="张三张三张三" textAlignment="center" lineBreakMode="clip" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="AEg-Tu-ye6">
<rect key="frame" x="8" y="88" width="72" height="19.333333333333329"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="16"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="免费续约次数3次" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="D6h-bE-tlh">
<rect key="frame" x="90" y="65.333333333333329" width="104.66666666666669" height="14.333333333333329"/>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="BVQ-z4-fHs">
<rect key="frame" x="26" y="111.33333333333333" width="36" height="19.999999999999986"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" title="10" image="mine_recharge_corn">
<color key="titleColor" red="1" green="0.15294117647058825" blue="0.15294117647058825" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
</button>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="当前在线" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="cha-OZ-i3U">
<rect key="frame" x="20" y="136.33333333333334" width="48" height="15"/>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<color key="textColor" red="0.22745098039215686" green="0.73725490196078436" blue="0.42745098039215684" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="VGe-Cc-S6Q">
<rect key="frame" x="90" y="87.666666666666686" width="85" height="66.333333333333314"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="今日" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fxt-Ok-e8L">
<rect key="frame" x="30.666666666666657" y="4" width="24" height="17"/>
<constraints>
<constraint firstAttribute="height" constant="17" id="xrg-jZ-zdc"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="收礼盈利" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="9wb-6a-aQt">
<rect key="frame" x="18.666666666666671" y="23" width="48" height="17"/>
<constraints>
<constraint firstAttribute="height" constant="17" id="AoH-Ct-GM9"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="dpa-gV-fxG">
<rect key="frame" x="2" y="41.999999999999986" width="81" height="22.333333333333329"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" title="10" image="family_diamond">
<color key="titleColor" red="1" green="0.1529411765" blue="0.1529411765" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
</button>
</subviews>
<color key="backgroundColor" red="0.85490196078431369" green="1" blue="0.88627450980392153" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="fxt-Ok-e8L" firstAttribute="centerX" secondItem="VGe-Cc-S6Q" secondAttribute="centerX" id="2pr-cg-4QY"/>
<constraint firstAttribute="width" constant="85" id="FPA-42-3py"/>
<constraint firstItem="9wb-6a-aQt" firstAttribute="top" secondItem="fxt-Ok-e8L" secondAttribute="bottom" constant="2" id="RzV-mu-ufj"/>
<constraint firstAttribute="bottom" secondItem="dpa-gV-fxG" secondAttribute="bottom" constant="2" id="dtB-XL-hOC"/>
<constraint firstItem="fxt-Ok-e8L" firstAttribute="top" secondItem="VGe-Cc-S6Q" secondAttribute="top" constant="4" id="ef4-nR-Mji"/>
<constraint firstItem="9wb-6a-aQt" firstAttribute="centerX" secondItem="VGe-Cc-S6Q" secondAttribute="centerX" id="iSE-Sg-0b1"/>
<constraint firstItem="dpa-gV-fxG" firstAttribute="top" secondItem="9wb-6a-aQt" secondAttribute="bottom" constant="2" id="ruM-mP-Gsq"/>
<constraint firstItem="dpa-gV-fxG" firstAttribute="leading" secondItem="VGe-Cc-S6Q" secondAttribute="leading" constant="2" id="wGY-6r-6Bn"/>
<constraint firstAttribute="trailing" secondItem="dpa-gV-fxG" secondAttribute="trailing" constant="2" id="xBG-GO-NWJ"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="4"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="oGH-dJ-lZy">
<rect key="frame" x="179" y="87.666666666666686" width="85" height="66.333333333333314"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="昨日" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="KF6-Jg-pqn">
<rect key="frame" x="30.666666666666657" y="4" width="24" height="17"/>
<constraints>
<constraint firstAttribute="height" constant="17" id="2Du-Vr-MGL"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="收礼盈利" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Rjt-H4-heD">
<rect key="frame" x="18.666666666666657" y="23" width="48" height="17"/>
<constraints>
<constraint firstAttribute="height" constant="17" id="nAr-LR-mvb"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="3Ml-mg-Cxw">
<rect key="frame" x="2" y="41.999999999999986" width="81" height="22.333333333333329"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" title="10" image="family_diamond">
<color key="titleColor" red="1" green="0.1529411765" blue="0.1529411765" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
</button>
</subviews>
<color key="backgroundColor" red="0.85490196080000003" green="1" blue="0.8862745098" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="trailing" secondItem="3Ml-mg-Cxw" secondAttribute="trailing" constant="2" id="4Wk-yD-BbV"/>
<constraint firstItem="Rjt-H4-heD" firstAttribute="top" secondItem="KF6-Jg-pqn" secondAttribute="bottom" constant="2" id="F2T-k5-Kgv"/>
<constraint firstAttribute="bottom" secondItem="3Ml-mg-Cxw" secondAttribute="bottom" constant="2" id="LJz-rW-T02"/>
<constraint firstItem="Rjt-H4-heD" firstAttribute="centerX" secondItem="oGH-dJ-lZy" secondAttribute="centerX" id="O15-tt-LOO"/>
<constraint firstAttribute="width" constant="85" id="bmv-lS-3aZ"/>
<constraint firstItem="3Ml-mg-Cxw" firstAttribute="leading" secondItem="oGH-dJ-lZy" secondAttribute="leading" constant="2" id="g7c-ng-N2i"/>
<constraint firstItem="3Ml-mg-Cxw" firstAttribute="top" secondItem="Rjt-H4-heD" secondAttribute="bottom" constant="2" id="jfG-L6-goi"/>
<constraint firstItem="KF6-Jg-pqn" firstAttribute="top" secondItem="oGH-dJ-lZy" secondAttribute="top" constant="4" id="udE-f7-Bn7"/>
<constraint firstItem="KF6-Jg-pqn" firstAttribute="centerX" secondItem="oGH-dJ-lZy" secondAttribute="centerX" id="xZZ-80-b2m"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="4"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</view>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="v1E-D6-JeF">
<rect key="frame" x="278" y="126" width="60" height="28"/>
<color key="backgroundColor" red="0.22745098039215686" green="0.73725490196078436" blue="0.42745098039215684" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="28" id="C6z-41-oB8"/>
<constraint firstAttribute="width" constant="60" id="Qmm-ha-usv"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="13"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" title="续租"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="14"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
<connections>
<action selector="continueAction:" destination="KGk-i7-Jjw" eventType="touchUpInside" id="0Dk-bG-uLt"/>
</connections>
</button>
</subviews>
<constraints>
<constraint firstItem="VGe-Cc-S6Q" firstAttribute="top" secondItem="D6h-bE-tlh" secondAttribute="bottom" constant="8" id="0xl-vd-Eab"/>
<constraint firstItem="Xpt-NC-KbR" firstAttribute="top" secondItem="iH0-Pj-t8s" secondAttribute="top" constant="14" id="0yY-Uq-uIw"/>
<constraint firstItem="uXg-p7-J2S" firstAttribute="top" secondItem="iH0-Pj-t8s" secondAttribute="top" constant="12" id="3Up-H8-deH"/>
<constraint firstItem="BVQ-z4-fHs" firstAttribute="top" secondItem="AEg-Tu-ye6" secondAttribute="bottom" constant="4" id="45o-bc-VTo"/>
<constraint firstItem="3c8-yw-ZcY" firstAttribute="leading" secondItem="Xpt-NC-KbR" secondAttribute="leading" id="7he-6a-LQn"/>
<constraint firstAttribute="bottom" secondItem="VGe-Cc-S6Q" secondAttribute="bottom" constant="12" id="87e-jS-o6v"/>
<constraint firstItem="D6h-bE-tlh" firstAttribute="top" secondItem="3c8-yw-ZcY" secondAttribute="bottom" constant="8" id="GX3-ge-Kid"/>
<constraint firstItem="AEg-Tu-ye6" firstAttribute="leading" secondItem="uXg-p7-J2S" secondAttribute="leading" constant="-10" id="Ggr-Ur-BTo"/>
<constraint firstAttribute="trailing" secondItem="Xpt-NC-KbR" secondAttribute="trailing" constant="11" id="IrF-U1-Mro"/>
<constraint firstItem="AEg-Tu-ye6" firstAttribute="top" secondItem="uXg-p7-J2S" secondAttribute="bottom" constant="8" id="J9W-JM-n7A"/>
<constraint firstItem="VGe-Cc-S6Q" firstAttribute="leading" secondItem="Xpt-NC-KbR" secondAttribute="leading" id="Jsy-KK-zrr"/>
<constraint firstItem="Msn-nc-t9D" firstAttribute="top" secondItem="iH0-Pj-t8s" secondAttribute="top" id="Rk3-kc-29m"/>
<constraint firstItem="D6h-bE-tlh" firstAttribute="leading" secondItem="Xpt-NC-KbR" secondAttribute="leading" id="WX5-EF-GjZ"/>
<constraint firstItem="v1E-D6-JeF" firstAttribute="bottom" secondItem="VGe-Cc-S6Q" secondAttribute="bottom" id="Xhb-uf-REu"/>
<constraint firstItem="oGH-dJ-lZy" firstAttribute="top" secondItem="VGe-Cc-S6Q" secondAttribute="top" id="bvy-kk-VyI"/>
<constraint firstItem="oGH-dJ-lZy" firstAttribute="bottom" secondItem="VGe-Cc-S6Q" secondAttribute="bottom" id="fer-eg-Q8u"/>
<constraint firstAttribute="trailing" secondItem="Msn-nc-t9D" secondAttribute="trailing" id="gQ1-bd-h8C"/>
<constraint firstItem="uXg-p7-J2S" firstAttribute="leading" secondItem="iH0-Pj-t8s" secondAttribute="leading" constant="18" id="jUx-NP-cQj"/>
<constraint firstItem="AEg-Tu-ye6" firstAttribute="trailing" secondItem="uXg-p7-J2S" secondAttribute="trailing" constant="10" id="nNH-Kq-QmX"/>
<constraint firstItem="Xpt-NC-KbR" firstAttribute="leading" secondItem="uXg-p7-J2S" secondAttribute="trailing" constant="20" id="p9M-CF-kU5"/>
<constraint firstItem="oGH-dJ-lZy" firstAttribute="leading" secondItem="VGe-Cc-S6Q" secondAttribute="trailing" constant="4" id="qvY-IN-Sh2"/>
<constraint firstItem="cha-OZ-i3U" firstAttribute="centerX" secondItem="uXg-p7-J2S" secondAttribute="centerX" id="r8z-sa-uZA"/>
<constraint firstItem="cha-OZ-i3U" firstAttribute="top" secondItem="BVQ-z4-fHs" secondAttribute="bottom" constant="5" id="ri0-KS-mht"/>
<constraint firstAttribute="trailing" secondItem="v1E-D6-JeF" secondAttribute="trailing" constant="5" id="t3Y-Ci-cqO"/>
<constraint firstAttribute="bottom" secondItem="Msn-nc-t9D" secondAttribute="bottom" id="vAB-on-UgX"/>
<constraint firstItem="3c8-yw-ZcY" firstAttribute="top" secondItem="Xpt-NC-KbR" secondAttribute="bottom" constant="10" id="vo1-0c-qqk"/>
<constraint firstItem="Msn-nc-t9D" firstAttribute="leading" secondItem="iH0-Pj-t8s" secondAttribute="leading" id="xki-e1-3Kn"/>
<constraint firstItem="BVQ-z4-fHs" firstAttribute="centerX" secondItem="uXg-p7-J2S" secondAttribute="centerX" id="zMn-Oa-xMf"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="12"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</view>
</subviews>
<constraints>
<constraint firstItem="iH0-Pj-t8s" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="6" id="Qrb-JX-7dX"/>
<constraint firstItem="iH0-Pj-t8s" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="16" id="VM1-pJ-dqP"/>
<constraint firstAttribute="trailing" secondItem="iH0-Pj-t8s" secondAttribute="trailing" constant="16" id="ng7-pJ-1Mx"/>
<constraint firstAttribute="bottom" secondItem="iH0-Pj-t8s" secondAttribute="bottom" constant="6" id="qzE-xj-NKp"/>
</constraints>
</tableViewCellContentView>
<viewLayoutGuide key="safeArea" id="aW0-zy-SZf"/>
<connections>
<outlet property="collectionView" destination="Xpt-NC-KbR" id="pmE-BS-kUl"/>
<outlet property="continueBtn" destination="v1E-D6-JeF" id="Srn-jh-maM"/>
<outlet property="dayLabel" destination="3c8-yw-ZcY" id="MbY-ho-AdO"/>
<outlet property="flowLayout" destination="ErA-Km-MvK" id="hkS-jB-9fF"/>
<outlet property="headerView" destination="uXg-p7-J2S" id="P7X-to-hlT"/>
<outlet property="nameLabel" destination="AEg-Tu-ye6" id="mys-qk-wdQ"/>
<outlet property="onlineLabel" destination="cha-OZ-i3U" id="CqR-eC-65V"/>
<outlet property="priceBtn" destination="BVQ-z4-fHs" id="CwE-cf-JVh"/>
<outlet property="timesLabel" destination="D6h-bE-tlh" id="Npo-LQ-mYv"/>
<outlet property="todayPriceBtn" destination="dpa-gV-fxG" id="tLX-md-1HV"/>
<outlet property="yestodayPriceBtn" destination="3Ml-mg-Cxw" id="kIm-ei-YWd"/>
</connections>
<point key="canvasLocation" x="257.25190839694653" y="66.901408450704224"/>
</tableViewCell>
</objects>
<resources>
<image name="family_diamond" width="14" height="14"/>
<image name="family_top_member_bg" width="343" height="164"/>
<image name="mine_recharge_corn" width="20" height="20"/>
</resources>
</document>

View File

@@ -0,0 +1,22 @@
//
// QXFamilyPriceRecordCell.h
// QXLive
//
// Created by 启星 on 2025/11/26.
//
#import <UIKit/UIKit.h>
#import "QXFamilyModel.h"
NS_ASSUME_NONNULL_BEGIN
@interface QXFamilyPriceRecordCell : UITableViewCell
@property (weak, nonatomic) IBOutlet UILabel *nameLabel;
@property (weak, nonatomic) IBOutlet UILabel *giftLabel;
@property (weak, nonatomic) IBOutlet UILabel *giftPriceLabel;
@property (weak, nonatomic) IBOutlet UILabel *timeLabel;
@property (weak, nonatomic) IBOutlet UILabel *moneyLabel;
@property (strong, nonatomic) QXFamilyEarningModel *model;
+(instancetype)cellWithTableView:(UITableView *)tableView;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,45 @@
//
// QXFamilyPriceRecordCell.m
// QXLive
//
// Created by on 2025/11/26.
//
#import "QXFamilyPriceRecordCell.h"
@implementation QXFamilyPriceRecordCell
+(instancetype)cellWithTableView:(UITableView *)tableView{
static NSString *cellId = @"QXFamilyPriceRecordCell";
QXFamilyPriceRecordCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
if (!cell) {
cell = [[NSBundle mainBundle] loadNibNamed:cellId owner:nil options:nil].lastObject;
cell.backgroundColor = [UIColor clearColor];
cell.contentView.backgroundColor = [UIColor clearColor];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
return cell;
}
-(void)setModel:(QXFamilyEarningModel *)model{
_model = model;
self.nameLabel.text = model.nickname;
self.giftLabel.text = [NSString stringWithFormat:@"礼物名称:%@",model.gift_name];
self.giftPriceLabel.text = [NSString stringWithFormat:@"礼物金额:%@",model.gift_price];
NSDate *date = [NSDate dateWithTimeIntervalSince1970:model.createtime.longLongValue]; //,1000 , 1000
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
NSString*time = [formatter stringFromDate:date];
self.timeLabel.text = time;
self.moneyLabel.text = [NSString stringWithFormat:@"+%@",model.earnings];
}
- (void)awakeFromNib {
[super awakeFromNib];
// Initialization code
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
@end

View File

@@ -0,0 +1,109 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23504" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<device id="retina6_12" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23506"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" rowHeight="115" id="KGk-i7-Jjw" customClass="QXFamilyPriceRecordCell">
<rect key="frame" x="0.0" y="0.0" width="437" height="115"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">
<rect key="frame" x="0.0" y="0.0" width="437" height="115"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="夏末" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qhY-xK-j4V">
<rect key="frame" x="16" y="12" width="28" height="20"/>
<constraints>
<constraint firstAttribute="height" constant="20" id="yEo-s3-dl7"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="礼物名称:娃哈哈" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="HJ8-fz-wWx">
<rect key="frame" x="16" y="36" width="87" height="17"/>
<constraints>
<constraint firstAttribute="height" constant="17" id="9Tr-bc-dxx"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<color key="textColor" red="0.65098039215686276" green="0.65098039215686276" blue="0.65098039215686276" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="礼物金额:2.00" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="1Ye-0Q-Ars">
<rect key="frame" x="16" y="57" width="76.666666666666671" height="17"/>
<constraints>
<constraint firstAttribute="height" constant="17" id="D9K-U1-SJT"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<color key="textColor" red="0.65098039220000004" green="0.65098039220000004" blue="0.65098039220000004" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="时间:2024.12.14 11:21:45" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="K90-F2-gDK">
<rect key="frame" x="16" y="78" width="138.66666666666666" height="17"/>
<constraints>
<constraint firstAttribute="height" constant="17" id="NXB-k6-bcp"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<color key="textColor" red="0.65098039220000004" green="0.65098039220000004" blue="0.65098039220000004" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="flF-ys-FmL">
<rect key="frame" x="0.0" y="114" width="437" height="1"/>
<color key="backgroundColor" red="0.94509803921568625" green="0.94901960784313721" blue="0.95294117647058818" alpha="1" colorSpace="calibratedRGB"/>
<constraints>
<constraint firstAttribute="height" constant="1" id="Je4-fq-8DP"/>
</constraints>
</view>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="family_diamond" translatesAutoresizingMaskIntoConstraints="NO" id="Epl-Tk-yAO">
<rect key="frame" x="405" y="16" width="16" height="16"/>
<constraints>
<constraint firstAttribute="width" constant="16" id="8jn-qK-laY"/>
<constraint firstAttribute="height" constant="16" id="yT0-QV-hOt"/>
</constraints>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="+10" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ykc-S1-6gP">
<rect key="frame" x="375" y="14.333333333333334" width="29" height="19.333333333333329"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="16"/>
<color key="textColor" red="1" green="0.15294117647058825" blue="0.15294117647058825" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<constraints>
<constraint firstAttribute="trailing" secondItem="flF-ys-FmL" secondAttribute="trailing" id="1jc-En-ojk"/>
<constraint firstItem="Epl-Tk-yAO" firstAttribute="leading" secondItem="ykc-S1-6gP" secondAttribute="trailing" constant="1" id="41O-42-s4J"/>
<constraint firstItem="qhY-xK-j4V" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="12" id="4ZR-PO-QSD"/>
<constraint firstItem="Epl-Tk-yAO" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="16" id="51M-Qu-JSa"/>
<constraint firstItem="ykc-S1-6gP" firstAttribute="centerY" secondItem="Epl-Tk-yAO" secondAttribute="centerY" id="CuU-6Q-HHr"/>
<constraint firstItem="flF-ys-FmL" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" id="RIQ-sW-mWT"/>
<constraint firstAttribute="trailing" secondItem="Epl-Tk-yAO" secondAttribute="trailing" constant="16" id="RW9-oL-s1o"/>
<constraint firstItem="K90-F2-gDK" firstAttribute="top" secondItem="1Ye-0Q-Ars" secondAttribute="bottom" constant="4" id="Z6j-2T-Z0T"/>
<constraint firstItem="1Ye-0Q-Ars" firstAttribute="leading" secondItem="qhY-xK-j4V" secondAttribute="leading" id="ZCB-0t-61d"/>
<constraint firstItem="1Ye-0Q-Ars" firstAttribute="top" secondItem="HJ8-fz-wWx" secondAttribute="bottom" constant="4" id="bzk-lp-22S"/>
<constraint firstItem="qhY-xK-j4V" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="16" id="eQd-xw-aT2"/>
<constraint firstItem="HJ8-fz-wWx" firstAttribute="top" secondItem="qhY-xK-j4V" secondAttribute="bottom" constant="4" id="gJu-uP-c6T"/>
<constraint firstAttribute="bottom" secondItem="flF-ys-FmL" secondAttribute="bottom" id="jeJ-ag-rT0"/>
<constraint firstItem="HJ8-fz-wWx" firstAttribute="leading" secondItem="qhY-xK-j4V" secondAttribute="leading" id="tTq-x2-K3e"/>
<constraint firstItem="K90-F2-gDK" firstAttribute="leading" secondItem="qhY-xK-j4V" secondAttribute="leading" id="z1r-cR-lZo"/>
</constraints>
</tableViewCellContentView>
<viewLayoutGuide key="safeArea" id="aW0-zy-SZf"/>
<connections>
<outlet property="giftLabel" destination="HJ8-fz-wWx" id="pkM-L4-ZWQ"/>
<outlet property="giftPriceLabel" destination="1Ye-0Q-Ars" id="0fu-nF-wy3"/>
<outlet property="moneyLabel" destination="ykc-S1-6gP" id="1sU-VR-dQw"/>
<outlet property="nameLabel" destination="qhY-xK-j4V" id="cTI-xo-aUG"/>
<outlet property="timeLabel" destination="K90-F2-gDK" id="57k-vs-LDq"/>
</connections>
<point key="canvasLocation" x="228.24427480916029" y="44.718309859154935"/>
</tableViewCell>
</objects>
<resources>
<image name="family_diamond" width="14" height="14"/>
</resources>
</document>

View File

@@ -0,0 +1,22 @@
//
// QXFamilyTopCell.h
// QXLive
//
// Created by 启星 on 2025/11/26.
//
#import <UIKit/UIKit.h>
#import "QXFamilyModel.h"
NS_ASSUME_NONNULL_BEGIN
@interface QXFamilyTopCell : UITableViewCell
@property (weak, nonatomic) IBOutlet QXSeatHeaderView *headerView;
@property (weak, nonatomic) IBOutlet UILabel *nameLabel;
@property (weak, nonatomic) IBOutlet UILabel *IdLabel;
@property (weak, nonatomic) IBOutlet UILabel *priceLabel;
@property (weak, nonatomic) IBOutlet UIButton *timesBtn;
@property (strong, nonatomic) QXFamilyModel *model;
+(instancetype)cellWithTableView:(UITableView *)tableView;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,55 @@
//
// QXFamilyTopCell.m
// QXLive
//
// Created by on 2025/11/26.
//
#import "QXFamilyTopCell.h"
#import "QXFamilyPriceRecordViewController.h"
@implementation QXFamilyTopCell
+(instancetype)cellWithTableView:(UITableView *)tableView{
static NSString *cellId = @"QXFamilyTopCell";
QXFamilyTopCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
if (!cell) {
cell = [[NSBundle mainBundle] loadNibNamed:cellId owner:nil options:nil].lastObject;
cell.backgroundColor = [UIColor clearColor];
cell.contentView.backgroundColor = [UIColor clearColor];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
return cell;
}
- (void)awakeFromNib {
[super awakeFromNib];
// Initialization code
}
- (IBAction)familyGroupAction:(id)sender {
if (self.model.group_members_lists.count == 0) {
showToast(@"家族群至少需要签约一位徒弟");
}else{
[[QXGlobal shareGlobal] chatWithGroupId:self.model.group_id cover:self.model.group_owner_info.avatar name:[NSString stringWithFormat:@"%@的家族",self.model.group_owner_info.nickname] navagationController:self.viewController.navigationController];
}
}
-(void)setModel:(QXFamilyModel *)model{
_model = model;
[self.headerView setHeadIcon:model.group_owner_info.avatar dress:model.group_owner_info.dress];
[self.headerView.nobilityImageView sd_setImageWithURL:[NSURL URLWithString:model.group_owner_info.nobility_image]];
self.nameLabel.text = model.group_owner_info.nickname;
self.IdLabel.text = [NSString stringWithFormat:@"ID:%@",model.group_owner_info.user_code];
self.priceLabel.text = model.group_earnings;
[self.timesBtn setTitle:[NSString stringWithFormat:@"签约次数:%@",model.group_members_num] forState:(UIControlStateNormal)];
}
- (IBAction)moreAction:(id)sender {
QXFamilyPriceRecordViewController *vc = [[QXFamilyPriceRecordViewController alloc] init];
[self.viewController.navigationController pushViewController:vc animated:YES];
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
@end

View File

@@ -0,0 +1,194 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23504" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<device id="retina6_12" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23506"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="System colors in document resources" minToolsVersion="11.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" rowHeight="151" id="KGk-i7-Jjw" customClass="QXFamilyTopCell">
<rect key="frame" x="0.0" y="0.0" width="450" height="166"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">
<rect key="frame" x="0.0" y="0.0" width="450" height="166"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="3BO-xe-hek">
<rect key="frame" x="16" y="6" width="418" height="154"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="family_top_card_bg" translatesAutoresizingMaskIntoConstraints="NO" id="GHu-EJ-Wbd">
<rect key="frame" x="0.0" y="0.0" width="418" height="154"/>
</imageView>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="e13-1K-ekR" customClass="QXSeatHeaderView">
<rect key="frame" x="12" y="12" width="52" height="68"/>
<constraints>
<constraint firstAttribute="width" constant="52" id="ANo-cs-wER"/>
<constraint firstAttribute="height" constant="68" id="XBq-sk-iDv"/>
</constraints>
</view>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="张三" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="TkV-BL-yL5">
<rect key="frame" x="70" y="18" width="32" height="20"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="16"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ID:000" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="z3B-k1-NTB">
<rect key="frame" x="70" y="48" width="41" height="16"/>
<fontDescription key="fontDescription" type="system" pointSize="13"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.65000000000000002" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="PyP-w3-ARC">
<rect key="frame" x="347" y="34" width="59" height="24"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="width" constant="59" id="YPA-f2-6hz"/>
<constraint firstAttribute="height" constant="24" id="us6-M5-pLx"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" title="家族群">
<color key="titleColor" red="0.22745098039215686" green="0.73725490196078436" blue="0.42745098039215684" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="12"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
<connections>
<action selector="familyGroupAction:" destination="KGk-i7-Jjw" eventType="touchUpInside" id="kgd-1Q-MnU"/>
</connections>
</button>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="family_top_money_bg" translatesAutoresizingMaskIntoConstraints="NO" id="7nK-sc-Xb1">
<rect key="frame" x="12" y="90" width="394" height="34"/>
<constraints>
<constraint firstAttribute="height" constant="34" id="8p3-Y6-R2b"/>
</constraints>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="总计收益:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="e4c-SV-262">
<rect key="frame" x="20" y="97.333333333333329" width="71.666666666666671" height="19.333333333333329"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="16"/>
<color key="textColor" red="1" green="0.15294117647058825" blue="0.15294117647058825" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="10" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3Oj-ZZ-dJY">
<rect key="frame" x="115.66666666666666" y="97" width="19" height="20"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="16"/>
<color key="textColor" red="1" green="0.1529411765" blue="0.1529411765" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="wallet_diamond" translatesAutoresizingMaskIntoConstraints="NO" id="cTA-sK-hax">
<rect key="frame" x="93.666666666666671" y="97" width="20" height="20"/>
<constraints>
<constraint firstAttribute="height" constant="20" id="DQX-KA-pkE"/>
<constraint firstAttribute="width" constant="20" id="NPS-q0-41H"/>
</constraints>
</imageView>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="p1I-Q6-afr">
<rect key="frame" x="12" y="118" width="95" height="24"/>
<color key="backgroundColor" red="0.73333333333333328" green="0.63529411764705879" blue="0.99607843137254903" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="width" constant="95" id="9QQ-oj-Ef7"/>
<constraint firstAttribute="height" constant="24" id="fqd-hY-yNf"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="13"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" title="签约次数2"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="12"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="0gn-8b-lI6">
<rect key="frame" x="303" y="90" width="95" height="34"/>
<constraints>
<constraint firstAttribute="width" constant="95" id="s59-iI-L71"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="13"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" title="查看更多">
<color key="titleColor" red="0.0" green="0.0" blue="0.0" alpha="0.48999999999999999" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="12"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
<connections>
<action selector="moreAction:" destination="KGk-i7-Jjw" eventType="touchUpInside" id="VfQ-Au-zQr"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
<constraints>
<constraint firstAttribute="trailing" secondItem="GHu-EJ-Wbd" secondAttribute="trailing" id="0jE-EF-hX0"/>
<constraint firstItem="TkV-BL-yL5" firstAttribute="top" secondItem="e13-1K-ekR" secondAttribute="top" constant="6" id="75K-gp-Cgc"/>
<constraint firstAttribute="bottom" secondItem="p1I-Q6-afr" secondAttribute="bottom" constant="12" id="8lM-bl-kBQ"/>
<constraint firstAttribute="trailing" secondItem="7nK-sc-Xb1" secondAttribute="trailing" constant="12" id="9sa-qm-BwO"/>
<constraint firstAttribute="trailing" secondItem="PyP-w3-ARC" secondAttribute="trailing" constant="12" id="ArF-ga-7Pc"/>
<constraint firstItem="e4c-SV-262" firstAttribute="centerY" secondItem="7nK-sc-Xb1" secondAttribute="centerY" id="Fet-Ld-aPl"/>
<constraint firstItem="0gn-8b-lI6" firstAttribute="top" secondItem="7nK-sc-Xb1" secondAttribute="top" id="JhD-54-GuB"/>
<constraint firstItem="e13-1K-ekR" firstAttribute="top" secondItem="3BO-xe-hek" secondAttribute="top" constant="12" id="K3Q-PA-aBG"/>
<constraint firstItem="GHu-EJ-Wbd" firstAttribute="top" secondItem="3BO-xe-hek" secondAttribute="top" id="NnM-R4-vuZ"/>
<constraint firstItem="PyP-w3-ARC" firstAttribute="centerY" secondItem="e13-1K-ekR" secondAttribute="centerY" id="PaC-cQ-ZGg"/>
<constraint firstItem="e13-1K-ekR" firstAttribute="leading" secondItem="3BO-xe-hek" secondAttribute="leading" constant="12" id="SL7-K7-CzP"/>
<constraint firstItem="7nK-sc-Xb1" firstAttribute="top" secondItem="e13-1K-ekR" secondAttribute="bottom" constant="10" id="The-Fm-7EX"/>
<constraint firstItem="z3B-k1-NTB" firstAttribute="leading" secondItem="TkV-BL-yL5" secondAttribute="leading" id="TmM-oO-jaK"/>
<constraint firstAttribute="trailing" secondItem="0gn-8b-lI6" secondAttribute="trailing" constant="20" id="U3O-kJ-MpN"/>
<constraint firstItem="TkV-BL-yL5" firstAttribute="leading" secondItem="e13-1K-ekR" secondAttribute="trailing" constant="6" id="VM4-zX-a10"/>
<constraint firstItem="cTA-sK-hax" firstAttribute="leading" secondItem="e4c-SV-262" secondAttribute="trailing" constant="2" id="ZQc-Hs-BIy"/>
<constraint firstItem="cTA-sK-hax" firstAttribute="centerY" secondItem="7nK-sc-Xb1" secondAttribute="centerY" id="cPp-hD-TGb"/>
<constraint firstItem="7nK-sc-Xb1" firstAttribute="leading" secondItem="3BO-xe-hek" secondAttribute="leading" constant="12" id="cbo-tO-HwG"/>
<constraint firstItem="3Oj-ZZ-dJY" firstAttribute="centerY" secondItem="7nK-sc-Xb1" secondAttribute="centerY" id="iaD-sN-p3Y"/>
<constraint firstItem="e4c-SV-262" firstAttribute="leading" secondItem="7nK-sc-Xb1" secondAttribute="leading" constant="8" id="j67-lX-4D3"/>
<constraint firstItem="p1I-Q6-afr" firstAttribute="leading" secondItem="e13-1K-ekR" secondAttribute="leading" id="jgY-0h-fIK"/>
<constraint firstItem="3Oj-ZZ-dJY" firstAttribute="leading" secondItem="cTA-sK-hax" secondAttribute="trailing" constant="2" id="lNr-Lh-ws1"/>
<constraint firstItem="0gn-8b-lI6" firstAttribute="bottom" secondItem="7nK-sc-Xb1" secondAttribute="bottom" id="sfq-af-C6B"/>
<constraint firstAttribute="bottom" secondItem="GHu-EJ-Wbd" secondAttribute="bottom" id="srm-KP-Woe"/>
<constraint firstItem="GHu-EJ-Wbd" firstAttribute="leading" secondItem="3BO-xe-hek" secondAttribute="leading" id="tYV-M9-uBA"/>
<constraint firstItem="z3B-k1-NTB" firstAttribute="top" secondItem="TkV-BL-yL5" secondAttribute="bottom" constant="10" id="w2f-jH-NvI"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="layer.masksToBounds" value="YES"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="12"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</view>
</subviews>
<constraints>
<constraint firstItem="3BO-xe-hek" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="16" id="4fs-bY-gK5"/>
<constraint firstAttribute="trailing" secondItem="3BO-xe-hek" secondAttribute="trailing" constant="16" id="iQP-Gx-B1k"/>
<constraint firstItem="3BO-xe-hek" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="6" id="o1N-M7-JGZ"/>
<constraint firstAttribute="bottom" secondItem="3BO-xe-hek" secondAttribute="bottom" constant="6" id="whe-CV-i6e"/>
</constraints>
</tableViewCellContentView>
<viewLayoutGuide key="safeArea" id="aW0-zy-SZf"/>
<connections>
<outlet property="IdLabel" destination="z3B-k1-NTB" id="boA-R9-9hQ"/>
<outlet property="headerView" destination="e13-1K-ekR" id="Oho-Pf-Go7"/>
<outlet property="nameLabel" destination="TkV-BL-yL5" id="4va-BZ-DuQ"/>
<outlet property="priceLabel" destination="3Oj-ZZ-dJY" id="7EC-Hv-Xv0"/>
<outlet property="timesBtn" destination="p1I-Q6-afr" id="N9W-RK-ulb"/>
</connections>
<point key="canvasLocation" x="238.1679389312977" y="57.04225352112676"/>
</tableViewCell>
</objects>
<resources>
<image name="family_top_card_bg" width="343" height="154"/>
<image name="family_top_money_bg" width="319" height="34"/>
<image name="wallet_diamond" width="28" height="28"/>
<systemColor name="systemBackgroundColor">
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</systemColor>
</resources>
</document>

View File

@@ -21,7 +21,12 @@
-(void)setModel:(QXDayTaskListModel *)model{
_model = model;
self.titleLabel.text = model.task_name;
NSString*subTitle = [NSString stringWithFormat:@"金币+%@",model.gold_reward];
NSString*subTitle = @"";
if (model.reward_type.intValue == 1) {
subTitle = [NSString stringWithFormat:@"金币+%@",model.gold_reward];
}else{
subTitle = [NSString stringWithFormat:@"钻石+%@",model.gold_reward];
}
NSMutableAttributedString *attr = [[NSMutableAttributedString alloc] initWithString:subTitle];
[attr yy_setColor:RGB16(0xFF8827) range:[subTitle rangeOfString:[NSString stringWithFormat:@"+%@",model.gold_reward]]];
self.subTitleLabel.attributedText = attr;