// // XPMonentsViewController.m // xplan-ios // // Created by 冯硕 on 2022/5/11. // #import "XPMonentsViewController.h" ///Third #import #import #import #import ///Tool #import "ThemeColor.h" #import "XPMacro.h" ///Tool #import "AttachMentModel.h" #import "MonentsUnReadModel.h" ///View #import "XPMonentsRecommendViewController.h" #import "XPMonentsAttentionViewController.h" #import "XPMonentsLatestViewController.h" #import "XPMonentsInteractiveViewController.h" #import "XPMonentsPublishViewController.h" #import "XPTeenagerHomeView.h" @interface XPMonentsViewController () ///标题 @property (nonatomic,strong) NSArray *titles; ///导航栏 @property (nonatomic,strong) UIView * navView; ///显示小红点 @property (nonatomic,strong) UIView * dotView; ///消息的 @property (nonatomic,strong) UIButton *messageButton; ///滑块 @property (nonatomic,strong) JXCategoryTitleView *titleView; @property (nonatomic, strong) JXCategoryListContainerView *listContainerView; ///发布的按钮 @property (nonatomic,strong) UIButton *publishButton; ///关注 @property (nonatomic,strong) XPMonentsAttentionViewController * attentionVC ; ///最新的 @property (nonatomic,strong) XPMonentsLatestViewController *latestVC; ///推荐 @property (nonatomic,strong) XPMonentsRecommendViewController * recommendVC; ///青少年空白view @property (nonatomic, strong) XPTeenagerHomeView *teenagerView; @end @implementation XPMonentsViewController @synthesize parentMode = _parentMode; - (void)dealloc { [[NIMSDK sharedSDK].systemNotificationManager removeDelegate:self]; } - (BOOL)isHiddenNavBar { return YES; } - (void)setParentMode:(BOOL)parentMode { _parentMode = parentMode; if (parentMode) { if (!self.teenagerView.superview) { [self.view addSubview:self.teenagerView]; [self.teenagerView mas_makeConstraints:^(MASConstraintMaker *make) { make.edges.mas_equalTo(self.view); }]; } } else { [self.teenagerView removeFromSuperview]; } } - (void)viewDidLoad { [super viewDidLoad]; [[NIMSDK sharedSDK].systemNotificationManager addDelegate:self]; [self initSubViews]; [self initSubViewConstraints]; } #pragma mark - Private Method - (void)initSubViews { [self.view addSubview:self.navView]; [self.view addSubview:self.listContainerView]; [self.view addSubview:self.publishButton]; [self.navView addSubview:self.titleView]; [self.navView addSubview:self.messageButton]; [self.navView addSubview:self.dotView]; } - (void)initSubViewConstraints { [self.navView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.right.top.mas_equalTo(self.view); make.height.mas_equalTo(kNavigationHeight); }]; [self.titleView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.right.mas_equalTo(self.navView); make.height.mas_equalTo(20); make.top.mas_equalTo(self.navView).offset(kSafeAreaTopHeight + 40); }]; [self.messageButton mas_makeConstraints:^(MASConstraintMaker *make) { make.centerY.mas_equalTo(self.titleView); make.right.mas_equalTo(self.navView).offset(-15); make.size.mas_equalTo(CGSizeMake(22, 22)); }]; [self.dotView mas_makeConstraints:^(MASConstraintMaker *make) { make.size.mas_equalTo(CGSizeMake(10, 10)); make.centerY.mas_equalTo(self.messageButton.mas_top); make.centerX.mas_equalTo(self.messageButton.mas_right); }]; [self.listContainerView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.right.bottom.mas_equalTo(self.view); make.top.mas_equalTo(self.navView.mas_bottom); }]; [self.publishButton mas_makeConstraints:^(MASConstraintMaker *make) { make.size.mas_equalTo(CGSizeMake(45, 45)); make.bottom.mas_equalTo(self.view).offset(-kSafeAreaBottomHeight - 30); make.right.mas_equalTo(self.view).offset(-15); }]; } #pragma mark - JXCategoryListContainerViewDelegate - (NSInteger)numberOfListsInlistContainerView:(JXCategoryListContainerView *)listContainerView { return self.titles.count; } // 根据下标 index 返回对应遵守并实现 `JXCategoryListContentViewDelegate` 协议的列表实例 - (id)listContainerView:(JXCategoryListContainerView *)listContainerView initListForIndex:(NSInteger)index { UIViewController * list = (UIViewController *)[self.listContainerView.validListDict objectForKey:[NSNumber numberWithInteger:index]]; if (list) { return list; } else { if (index == 0) { return self.attentionVC; }else if (index == 1) { return self.recommendVC; } else if(index == 2) { return self.latestVC; } return nil; } } #pragma mark -NIMSystemNotificationManagerDelegate - (void)onReceiveCustomSystemNotification:(NIMCustomSystemNotification *)notification { if (notification.receiverType == NIMSessionTypeP2P) { if (notification.content != nil) { AttachmentModel *attachment = [AttachmentModel modelWithJSON:notification.content]; if (attachment.first == CustomMessageType_Monents && attachment.second == Custom_Message_Sub_Monents_Unread_Update) { MonentsUnReadModel * unreadModel = [MonentsUnReadModel modelWithDictionary:attachment.data]; if (unreadModel.total > 0) { self.dotView.hidden = NO; } else { self.dotView.hidden = YES; } [self setTabBarItemBadge:unreadModel.total]; } } } } - (void)setTabBarItemBadge:(NSInteger)value { if (value > 0) { if (value > 99) { [self.tabBarItem setBadgeValue:@"99+"]; } else { [self.tabBarItem setBadgeValue:[NSString stringWithFormat:@"%ld", value]]; } } else { [self.tabBarItem setBadgeValue:nil]; } } #pragma mark - Event Response - (void)messageButtonAction:(UIButton *)sender { XPMonentsInteractiveViewController * messageVC = [[XPMonentsInteractiveViewController alloc] init]; [self.navigationController pushViewController:messageVC animated:YES]; } - (void)publishButtonAction:(UIButton *)sender { XPMonentsPublishViewController * publishVC = [[XPMonentsPublishViewController alloc] init]; [self.navigationController pushViewController:publishVC animated:YES]; } #pragma mark - Getters And Setters - (JXCategoryListContainerView *)listContainerView { if (!_listContainerView) { _listContainerView = [[JXCategoryListContainerView alloc] initWithType:JXCategoryListContainerType_ScrollView delegate:self]; _listContainerView.listCellBackgroundColor = [UIColor clearColor]; } return _listContainerView; } - (JXCategoryTitleView *)titleView { if (!_titleView) { _titleView = [[JXCategoryTitleView alloc] initWithFrame:CGRectZero]; _titleView.backgroundColor =[UIColor clearColor]; _titleView.delegate = self; _titleView.titleColor = [ThemeColor secondTextColor]; _titleView.titleSelectedColor = [ThemeColor mainTextColor]; _titleView.titleFont = [UIFont systemFontOfSize:15 weight:UIFontWeightSemibold]; _titleView.titleSelectedFont = [UIFont systemFontOfSize:20 weight:UIFontWeightHeavy]; _titleView.titleLabelAnchorPointStyle = JXCategoryTitleLabelAnchorPointStyleCenter; _titleView.contentScrollViewClickTransitionAnimationEnabled = NO; _titleView.averageCellSpacingEnabled = NO; _titleView.defaultSelectedIndex = 0; _titleView.cellSpacing = 20; _titleView.titles = self.titles; _titleView.listContainer = self.listContainerView; _titleView.defaultSelectedIndex = 1; CGFloat itemWidth = [@"推荐" boundingRectWithSize:CGSizeMake(100, CGFLOAT_MAX) options:NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:20 weight:UIFontWeightHeavy]} context:nil].size.width; _titleView.cellWidth = itemWidth; _titleView.contentEdgeInsetLeft = (KScreenWidth - itemWidth * self.titles.count - 20 * (self.titles.count - 1))/ 2; } return _titleView; } - (UIView *)navView { if (!_navView) { _navView = [[UIView alloc] init]; _navView.backgroundColor = [ThemeColor appCellBackgroundColor]; } return _navView; } - (NSArray *)titles { if (!_titles) { _titles = @[@"关注",@"推荐", @"最新"]; } return _titles; } - (UIButton *)messageButton { if (!_messageButton) { _messageButton = [UIButton buttonWithType:UIButtonTypeCustom]; [_messageButton setImage:[UIImage imageNamed:@"monents_nav_interavtive_message"] forState:UIControlStateNormal]; [_messageButton setImage:[UIImage imageNamed:@"monents_nav_interavtive_message"] forState:UIControlStateSelected]; [_messageButton addTarget:self action:@selector(messageButtonAction:) forControlEvents:UIControlEventTouchUpInside]; } return _messageButton; } - (UIView *)dotView { if (!_dotView) { _dotView = [[UIView alloc] init]; _dotView.backgroundColor = UIColorFromRGB(0xFF2D55); _dotView.layer.masksToBounds = YES; _dotView.layer.cornerRadius = 5; _dotView.hidden = YES; } return _dotView; } - (UIButton *)publishButton { if (!_publishButton) { _publishButton = [UIButton buttonWithType:UIButtonTypeCustom]; [_publishButton setImage:[UIImage imageNamed:@"monents_publish"] forState:UIControlStateNormal]; [_publishButton setImage:[UIImage imageNamed:@"monents_publish"] forState:UIControlStateSelected]; [_publishButton addTarget:self action:@selector(publishButtonAction:) forControlEvents:UIControlEventTouchUpInside]; } return _publishButton; } - (XPMonentsAttentionViewController *)attentionVC { if (!_attentionVC) { XPMonentsAttentionViewController * attentionVC = [[XPMonentsAttentionViewController alloc] init]; _attentionVC = attentionVC; } return _attentionVC; } - (XPMonentsLatestViewController *)latestVC { if (!_latestVC) { _latestVC = [[XPMonentsLatestViewController alloc] init]; } return _latestVC; } - (XPMonentsRecommendViewController *)recommendVC { if (!_recommendVC) { _recommendVC = [[XPMonentsRecommendViewController alloc] init]; } return _recommendVC; } - (XPTeenagerHomeView *)teenagerView { if (!_teenagerView) { _teenagerView = [[XPTeenagerHomeView alloc] init]; } return _teenagerView; } @end