This commit is contained in:
2025-12-04 19:12:34 +08:00
parent 8f63741d8c
commit 64887054e0
18 changed files with 331 additions and 50 deletions

View File

@@ -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;
}