1
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
#import "LSTPopView.h"
|
||||
#import <HWPanModal/HWPanModal.h>
|
||||
#import "KBMyVM.h" // 用户人设变更通知
|
||||
#import "KBHUD.h"
|
||||
|
||||
@interface HomeHotVC () <UITableViewDataSource, UITableViewDelegate>
|
||||
|
||||
@@ -52,6 +53,18 @@
|
||||
self.topThreeView = [[KBTopThreeView alloc] initWithFrame:CGRectMake(0, 0, KB_SCREEN_WIDTH, headerH)];
|
||||
self.tableView.tableHeaderView = self.topThreeView;
|
||||
|
||||
KBWeakSelf
|
||||
// 顶部三名区域的三个加号按钮:添加人设
|
||||
self.topThreeView.onCenterPlusTapped = ^(KBCharacter * _Nullable character) {
|
||||
[weakSelf kb_addUserCharacterFromTopViewWithCharacter:character];
|
||||
};
|
||||
self.topThreeView.onLeftPlusTapped = ^(KBCharacter * _Nullable character) {
|
||||
[weakSelf kb_addUserCharacterFromTopViewWithCharacter:character];
|
||||
};
|
||||
self.topThreeView.onRightPlusTapped = ^(KBCharacter * _Nullable character) {
|
||||
[weakSelf kb_addUserCharacterFromTopViewWithCharacter:character];
|
||||
};
|
||||
|
||||
// 请求排行榜数据
|
||||
self.homeVM = [KBHomeVM new];
|
||||
[self kb_reloadRankListWithShowHUD:YES];
|
||||
@@ -79,21 +92,9 @@
|
||||
}
|
||||
weakSelf.allCharacters = list ?: @[];
|
||||
|
||||
// 顶部前三名数据:直接取前三个模型交给 KBTopThreeView
|
||||
NSInteger topCount = MIN(3, weakSelf.allCharacters.count);
|
||||
if (topCount > 0) {
|
||||
NSRange range = NSMakeRange(0, topCount);
|
||||
NSArray<KBCharacter *> *topThree = [weakSelf.allCharacters subarrayWithRange:range];
|
||||
[weakSelf.topThreeView configWithCharacters:topThree];
|
||||
}
|
||||
|
||||
// 列表部分:从第 4 名开始
|
||||
if (weakSelf.allCharacters.count > 3) {
|
||||
NSRange range = NSMakeRange(3, weakSelf.allCharacters.count - 3);
|
||||
weakSelf.listCharacters = [weakSelf.allCharacters subarrayWithRange:range];
|
||||
} else {
|
||||
weakSelf.listCharacters = @[];
|
||||
}
|
||||
// 根据最新数据刷新顶部前三名与列表部分
|
||||
[weakSelf kb_refreshTopThreeView];
|
||||
[weakSelf kb_refreshListCharacters];
|
||||
[weakSelf.tableView reloadData];
|
||||
|
||||
// 通知承载 HomeHotVC 的“外层 PanModal 容器”刷新布局。
|
||||
@@ -129,7 +130,7 @@
|
||||
|
||||
BOOL contains = NO;
|
||||
for (KBCharacter *c in self.allCharacters) {
|
||||
if (c.characterId.integerValue == targetId) {
|
||||
if (c.ID.integerValue == targetId) {
|
||||
contains = YES;
|
||||
break;
|
||||
}
|
||||
@@ -140,6 +141,52 @@
|
||||
[self kb_reloadRankListWithShowHUD:NO];
|
||||
}
|
||||
|
||||
/// 根据当前 allCharacters 刷新顶部前三名区域
|
||||
- (void)kb_refreshTopThreeView {
|
||||
NSInteger topCount = MIN(3, self.allCharacters.count);
|
||||
if (topCount > 0) {
|
||||
NSRange range = NSMakeRange(0, topCount);
|
||||
NSArray<KBCharacter *> *topThree = [self.allCharacters subarrayWithRange:range];
|
||||
[self.topThreeView configWithCharacters:topThree];
|
||||
} else {
|
||||
[self.topThreeView configWithCharacters:@[]];
|
||||
}
|
||||
}
|
||||
|
||||
/// 根据当前 allCharacters 刷新列表区域(第 4 名及以后)
|
||||
- (void)kb_refreshListCharacters {
|
||||
if (self.allCharacters.count > 3) {
|
||||
NSRange range = NSMakeRange(3, self.allCharacters.count - 3);
|
||||
self.listCharacters = [self.allCharacters subarrayWithRange:range];
|
||||
} else {
|
||||
self.listCharacters = @[];
|
||||
}
|
||||
}
|
||||
|
||||
/// 顶部三名区域点击“+”添加人设
|
||||
- (void)kb_addUserCharacterFromTopViewWithCharacter:(KBCharacter * _Nullable)character {
|
||||
if (!character || character.added) { return; }
|
||||
|
||||
NSString *cidStr = character.ID ?: @"";
|
||||
if (cidStr.length == 0) { return; }
|
||||
NSNumber *cid = @([cidStr integerValue]);
|
||||
|
||||
[self.homeVM addUserCharacterWithId:cid
|
||||
completion:^(BOOL success, NSError * _Nullable error) {
|
||||
if (!success) {
|
||||
NSString *msg = error.localizedDescription ?: KBLocalized(@"Network error");
|
||||
[KBHUD showInfo:msg];
|
||||
return;
|
||||
}
|
||||
|
||||
// 添加成功:更新模型状态
|
||||
character.added = YES;
|
||||
// 刷新顶部与列表 UI
|
||||
[self kb_refreshTopThreeView];
|
||||
[self.tableView reloadData];
|
||||
}];
|
||||
}
|
||||
|
||||
#pragma mark - UITableViewDataSource
|
||||
|
||||
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
|
||||
@@ -151,6 +198,44 @@
|
||||
KBCharacter *item = self.listCharacters[indexPath.row];
|
||||
// 直接把模型交给 cell,由 cell 自己负责展示
|
||||
cell.character = item;
|
||||
KBWeakSelf
|
||||
__weak typeof(cell) weakCell = cell;
|
||||
cell.onTapAction = ^{
|
||||
__strong typeof(weakSelf) self = weakSelf;
|
||||
HomeHotCell *strongCell = weakCell;
|
||||
if (!self || !strongCell) { return; }
|
||||
|
||||
NSIndexPath *current = [self.tableView indexPathForCell:strongCell];
|
||||
if (!current) { return; }
|
||||
if (current.row >= self.listCharacters.count) { return; }
|
||||
|
||||
KBCharacter *mc = self.listCharacters[current.row];
|
||||
// 已添加状态下不允许再次点击
|
||||
if (mc.added) { return; }
|
||||
|
||||
NSString *cidStr = mc.ID ?: @"";
|
||||
if (cidStr.length == 0) { return; }
|
||||
NSNumber *cid = @([cidStr integerValue]);
|
||||
|
||||
[self.homeVM addUserCharacterWithId:cid
|
||||
completion:^(BOOL success, NSError * _Nullable error) {
|
||||
if (!success) {
|
||||
NSString *msg = error.localizedDescription ?: KBLocalized(@"Network error");
|
||||
[KBHUD showInfo:msg];
|
||||
return;
|
||||
}
|
||||
|
||||
// 添加成功:更新模型状态并刷新当前行(按钮变为已添加且不可再点)
|
||||
mc.added = YES;
|
||||
NSMutableArray *m = [self.listCharacters mutableCopy];
|
||||
[m replaceObjectAtIndex:current.row withObject:mc];
|
||||
self.listCharacters = [m copy];
|
||||
[self.tableView reloadRowsAtIndexPaths:@[current] withRowAnimation:UITableViewRowAnimationNone];
|
||||
|
||||
// 同步更新顶部前三名的展示状态
|
||||
[self kb_refreshTopThreeView];
|
||||
}];
|
||||
};
|
||||
return cell;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user