
主要变更: 1. 在 .gitignore 中添加了 Docs/ 文件夹,以忽略文档相关文件。 2. 删除了多个过时的文档,包括构建指南、编译修复指南和当前状态报告等。 此更新旨在清理项目文件,确保版本控制的整洁性。
221 lines
7.0 KiB
Objective-C
221 lines
7.0 KiB
Objective-C
//
|
||
// EPMineViewController.m
|
||
// YuMi
|
||
//
|
||
// Created by AI on 2025-10-09.
|
||
// Copyright © 2025 YuMi. All rights reserved.
|
||
//
|
||
|
||
#import "EPMineViewController.h"
|
||
#import "EPMineHeaderView.h"
|
||
#import "EPMomentListView.h"
|
||
#import "EPMineAPIHelper.h"
|
||
#import "AccountInfoStorage.h"
|
||
#import "UserInfoModel.h"
|
||
#import <Masonry/Masonry.h>
|
||
#import "YuMi-Swift.h" // 导入Swift桥接
|
||
|
||
@interface EPMineViewController ()
|
||
|
||
// MARK: - UI Components
|
||
|
||
/// 动态列表视图(复用 EPMomentListView)
|
||
@property (nonatomic, strong) EPMomentListView *momentListView;
|
||
|
||
/// 顶部个人信息卡片
|
||
@property (nonatomic, strong) EPMineHeaderView *headerView;
|
||
|
||
// MARK: - Data
|
||
|
||
/// 用户信息模型
|
||
@property (nonatomic, strong) UserInfoModel *userInfo;
|
||
|
||
/// API Helper
|
||
@property (nonatomic, strong) EPMineAPIHelper *apiHelper;
|
||
|
||
@end
|
||
|
||
@implementation EPMineViewController
|
||
|
||
// MARK: - Lifecycle
|
||
|
||
- (void)viewDidLoad {
|
||
[super viewDidLoad];
|
||
[self setupUI];
|
||
|
||
NSLog(@"[EPMineViewController] viewDidLoad 完成");
|
||
}
|
||
|
||
- (void)viewWillAppear:(BOOL)animated {
|
||
[super viewWillAppear:animated];
|
||
[self.navigationController setNavigationBarHidden:YES animated:animated];
|
||
// 每次显示时加载最新数据
|
||
[self loadUserDetailInfo];
|
||
}
|
||
|
||
// MARK: - Setup
|
||
|
||
- (void)setupUI {
|
||
UIImageView *bgImageView = [[UIImageView alloc] initWithImage:kImage(@"vc_bg")];
|
||
bgImageView.contentMode = UIViewContentModeScaleAspectFill;
|
||
bgImageView.clipsToBounds = YES;
|
||
[self.view addSubview:bgImageView];
|
||
[bgImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||
make.edges.mas_equalTo(self.view);
|
||
}];
|
||
|
||
[self setupHeaderView];
|
||
[self setupMomentListView];
|
||
|
||
NSLog(@"[EPMineViewController] UI 设置完成");
|
||
}
|
||
|
||
- (void)setupHeaderView {
|
||
self.headerView = [[EPMineHeaderView alloc] initWithFrame:CGRectZero];
|
||
[self.view addSubview:self.headerView];
|
||
|
||
// 使用 Masonry 约束布局
|
||
[self.headerView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||
make.top.mas_equalTo(self.view);
|
||
make.leading.mas_equalTo(self.view);
|
||
make.trailing.mas_equalTo(self.view);
|
||
make.height.mas_equalTo(kGetScaleWidth(260));
|
||
}];
|
||
|
||
// 设置按钮点击回调
|
||
__weak typeof(self) weakSelf = self;
|
||
self.headerView.onSettingsButtonTapped = ^{
|
||
__strong typeof(weakSelf) self = weakSelf;
|
||
[self openSettings];
|
||
};
|
||
|
||
// 监听头像更新事件
|
||
[[NSNotificationCenter defaultCenter] addObserver:self
|
||
selector:@selector(onAvatarUpdated:)
|
||
name:@"EPEditSettingAvatarUpdated"
|
||
object:nil];
|
||
}
|
||
|
||
- (void)setupMomentListView {
|
||
self.momentListView = [[EPMomentListView alloc] initWithFrame:CGRectZero];
|
||
[self.view addSubview:self.momentListView];
|
||
|
||
[self.momentListView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||
make.top.mas_equalTo(self.headerView.mas_bottom);
|
||
make.bottom.mas_equalTo(self.view);
|
||
make.leading.mas_equalTo(self.view);
|
||
make.trailing.mas_equalTo(self.view);
|
||
}];
|
||
|
||
// 初始化为空的本地模式,避免在数据加载前触发网络请求
|
||
__weak typeof(self) weakSelf = self;
|
||
[self.momentListView loadWithDynamicInfo:@[] refreshCallback:^{
|
||
__strong typeof(weakSelf) self = weakSelf;
|
||
[self loadUserDetailInfo];
|
||
}];
|
||
}
|
||
|
||
// MARK: - Data Loading
|
||
|
||
- (void)loadUserDetailInfo {
|
||
NSString *uid = [[AccountInfoStorage instance] getUid];
|
||
if (!uid || uid.length == 0) {
|
||
NSLog(@"[EPMineViewController] 用户未登录");
|
||
return;
|
||
}
|
||
|
||
@kWeakify(self);
|
||
[self.apiHelper getUserDetailInfoWithUid:uid
|
||
completion:^(UserInfoModel * _Nullable userInfo) {
|
||
@kStrongify(self);
|
||
if (!userInfo) {
|
||
NSLog(@"[EPMineViewController] 加载用户信息失败");
|
||
return;
|
||
}
|
||
|
||
self.userInfo = userInfo;
|
||
[self updateHeaderWithUserInfo:userInfo];
|
||
|
||
// 如果有动态信息,直接使用
|
||
if (userInfo.dynamicInfo && userInfo.dynamicInfo.count > 0) {
|
||
[self.momentListView loadWithDynamicInfo:userInfo.dynamicInfo refreshCallback:^{
|
||
[self loadUserDetailInfo]; // 刷新时重新加载
|
||
}];
|
||
}
|
||
} failure:^(NSInteger code, NSString * _Nullable msg) {
|
||
NSLog(@"[EPMineViewController] 加载用户信息失败: %@", msg);
|
||
}];
|
||
}
|
||
|
||
- (void)updateHeaderWithUserInfo:(UserInfoModel *)userInfo {
|
||
NSDictionary *userInfoDict = @{
|
||
@"nickname": userInfo.nick ?: @"未设置昵称",
|
||
@"uid": [NSString stringWithFormat:@"%ld", (long)userInfo.erbanNo],
|
||
@"avatar": userInfo.avatar ?: @"",
|
||
@"following": @(userInfo.followNum),
|
||
@"followers": @(userInfo.fansNum)
|
||
};
|
||
|
||
[self.headerView updateWithUserInfo:userInfoDict];
|
||
}
|
||
|
||
// MARK: - Lazy Loading
|
||
|
||
- (EPMomentListView *)momentListView {
|
||
if (!_momentListView) {
|
||
_momentListView = [[EPMomentListView alloc] init];
|
||
__weak typeof(self) weakSelf = self;
|
||
_momentListView.onSelectMoment = ^(NSInteger index) {
|
||
__strong typeof(weakSelf) self = weakSelf;
|
||
NSLog(@"[EPMineViewController] 点击了第 %ld 条动态", (long)index);
|
||
// TODO: 跳转到动态详情页
|
||
};
|
||
}
|
||
return _momentListView;
|
||
}
|
||
|
||
- (EPMineAPIHelper *)apiHelper {
|
||
if (!_apiHelper) {
|
||
_apiHelper = [[EPMineAPIHelper alloc] init];
|
||
}
|
||
return _apiHelper;
|
||
}
|
||
|
||
// MARK: - Actions
|
||
|
||
- (void)openSettings {
|
||
// 隐藏返回按钮文字,只保留白色箭头
|
||
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@""
|
||
style:UIBarButtonItemStylePlain
|
||
target:nil
|
||
action:nil];
|
||
|
||
EPEditSettingViewController *settingsVC = [[EPEditSettingViewController alloc] init];
|
||
// 传递用户信息到设置页面
|
||
if (self.userInfo) {
|
||
[settingsVC updateWithUserInfo:self.userInfo];
|
||
}
|
||
[self.navigationController pushViewController:settingsVC animated:YES];
|
||
NSLog(@"[EPMineViewController] 打开设置页面,已传递用户信息");
|
||
}
|
||
|
||
- (void)onAvatarUpdated:(NSNotification *)notification {
|
||
NSString *avatarUrl = notification.userInfo[@"avatarUrl"];
|
||
if (avatarUrl && self.userInfo) {
|
||
// 更新本地用户信息
|
||
self.userInfo.avatar = avatarUrl;
|
||
|
||
// 更新 UI 显示
|
||
[self updateHeaderWithUserInfo:self.userInfo];
|
||
|
||
NSLog(@"[EPMineViewController] 头像已更新: %@", avatarUrl);
|
||
}
|
||
}
|
||
|
||
- (void)dealloc {
|
||
// 只移除头像更新通知的观察者,设置按钮现在使用 block 回调
|
||
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"EPEditSettingAvatarUpdated" object:nil];
|
||
}
|
||
|
||
@end
|