Files
peko-ios/YuMi/Modules/YMMessage/View/Session/Content/MessageContentTextClickable.m
2023-10-10 14:51:30 +08:00

280 lines
11 KiB
Objective-C

//
// MessageContentTextClickable.m
// YUMI
//
// Created by zu on 2022/1/24.
//
#import "MessageContentTextClickable.h"
///Third
#import <Masonry/Masonry.h>
#import <NIMSDK/NIMSDK.h>
///Tool
#import "DJDKMIMOMColor.h"
#import "NSObject+MJExtension.h"
#import "XCCurrentVCStackManager.h"
#import "Api.h"
#import "AccountInfoStorage.h"
#import "XNDJTDDLoadingTool.h"
#import "NSObject+MJExtension.h"
#import "ClientConfig.h"
///Model
#import "UserInfoModel.h"
#import "ContentSecretaryModel.h"
#import "MessageTextClickModel.h"
///View
#import "XPRoomViewController.h"
#import "XPWebViewController.h"
#import "XPMineRechargeViewController.h"
#import "XPMineUserInfoViewController.h"
#import "XPMineSimpleUserInfoViewController.h"
#import "XPMineDressUpViewController.h"
#import "XPDressUpShopViewController.h"
#import "XPMineLoginPasswordViewController.h"
#import "XPMonentTopicContainerViewController.h"
///P
#import "RoomHostDelegate.h"
@interface MessageContentTextClickable()
/**
消息文本
*/
@property (nonatomic, strong) UILabel * messageText;
///获取的模型
@property (nonatomic,strong) ContentSecretaryModel *contentInfo;
///分割线
@property (nonatomic,strong) UIView * lineView;
///查看详情
@property (nonatomic,strong) UIButton *checkButton;
@end
@implementation MessageContentTextClickable
- (void)initSubViews {
[super initSubViews];
[self.backView addSubview:self.messageText];
[self.backView addSubview:self.lineView];
[self.backView addSubview:self.checkButton];
}
- (void)initSubViewConstraints {
[super initSubViewConstraints];
[self.backView mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.mas_equalTo(280);
make.bottom.mas_equalTo(self.checkButton);
}];
[self.messageText mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.left.right.equalTo(self.backView);
}];
[self.lineView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.mas_equalTo(self.backView);
make.height.mas_equalTo(0.5);
make.top.mas_equalTo(self.messageText.mas_bottom).offset(5);
}];
[self.checkButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.mas_equalTo(self.backView);
make.top.mas_equalTo(self.lineView.mas_bottom).offset(10);
make.height.mas_equalTo(20);
}];
}
- (void)render:(nonnull MessageBaseModel *)message {
MessageTextClickModel * textModel = (MessageTextClickModel *)message;
_messageText.attributedText = textModel.attributedText;
_contentInfo = textModel.contentInfo;
CGFloat oneHeight = [YMLocalizedString(@"MessageContentTweetView0") boundingRectWithSize:CGSizeMake(240, CGFLOAT_MAX) options:NSStringDrawingUsesFontLeading | NSStringDrawingUsesLineFragmentOrigin
attributes:[self messageTextAttibutes:[UIFont systemFontOfSize:16] color:[DJDKMIMOMColor mainTextColor]] context:nil].size.height + 2.5;
CGFloat titleHeight = [textModel.attributedText.string boundingRectWithSize:CGSizeMake(240, CGFLOAT_MAX) options:NSStringDrawingUsesFontLeading | NSStringDrawingUsesLineFragmentOrigin
attributes:[self messageTextAttibutes:[UIFont systemFontOfSize:16] color:[DJDKMIMOMColor mainTextColor]] context:nil].size.height;
if (titleHeight <= oneHeight * 2) {
[self.messageText mas_updateConstraints:^(MASConstraintMaker *make) {
make.height.mas_equalTo(titleHeight + 5);
}];
} else{
[self.messageText mas_updateConstraints:^(MASConstraintMaker *make) {
make.height.mas_equalTo(oneHeight * 2);
}];
}
}
- (NSDictionary<NSAttributedStringKey, id> *)messageTextAttibutes:(UIFont *)font color:(UIColor *)color {
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
[paragraphStyle setLineSpacing:2.5];
return @{
NSFontAttributeName:font,
NSParagraphStyleAttributeName: paragraphStyle,
NSForegroundColorAttributeName:color
};
}
- (void)checkButtonAction:(UIButton *)gesture {
SecretaryRouterType type = self.contentInfo.routerType;
NSString * value = self.contentInfo.routerValue;
switch (type) {
case SecretaryRouterType_H5: {
if (value.length) {
XPWebViewController * webVC =[[XPWebViewController alloc] init];
webVC.url = value;
[self.nim_viewController.navigationController pushViewController:webVC animated:YES];
}
}
break;
case SecretaryRouterType_Room:
{
if (value.length > 0) {
UIViewController * controllerView = [XCCurrentVCStackManager shareManager].getCurrentVC;
//退出原来的房间 如果有的话 TODO 总感觉这种处理不太优雅 进房入口多了 怎么办 进房需要整合
[controllerView.navigationController.viewControllers enumerateObjectsUsingBlock:^(__kindof UIViewController * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if ([obj isKindOfClass:[XPRoomViewController class]]) {
[controllerView.navigationController popToRootViewControllerAnimated:NO];
XPRoomViewController<RoomHostDelegate> * rooomVC = obj;
[rooomVC exitRoom];
*stop = YES;
}
}];
[XPRoomViewController openRoom:value viewController:[XCCurrentVCStackManager shareManager].getCurrentVC];
}
}
break;
case SecretaryRouterType_Purse:
case SecretaryRouterType_Recharge:
{
XPWebViewController * webVC =[[XPWebViewController alloc] init];
webVC.url = [NSString stringWithFormat:URLWithType(kThirdPartyPay),@"4",[YYUtility deviceID]];
webVC.isPush = YES;
[[XCCurrentVCStackManager shareManager].getCurrentVC.navigationController pushViewController:webVC animated:YES];
}
break;
case SecretaryRouterType_UserInfo:
{
if (value.length > 0) {
if ([ClientConfig shareConfig].canOpen) {
XPMineUserInfoViewController * userInfoVC = [[XPMineUserInfoViewController alloc] init];
userInfoVC.uid = value.integerValue;
[[XCCurrentVCStackManager shareManager].getCurrentVC.navigationController pushViewController:userInfoVC animated:YES];
}else{
XPMineSimpleUserInfoViewController * userInfoVC = [[XPMineSimpleUserInfoViewController alloc] init];
userInfoVC.uid = value.integerValue;
[[XCCurrentVCStackManager shareManager].getCurrentVC.navigationController pushViewController:userInfoVC animated:YES];
}
}
}
break;
case SecretaryRouterType_Car:
{
XPMineDressUpViewController * dressUpVC = [[XPMineDressUpViewController alloc] init];
dressUpVC.currentIndex = 1;
[[XCCurrentVCStackManager shareManager].getCurrentVC.navigationController pushViewController:dressUpVC animated:YES];
}
break;
case SecretaryRouterType_Headwear:
{
XPMineDressUpViewController * dressUpVC = [[XPMineDressUpViewController alloc] init];
dressUpVC.currentIndex = 0;
[[XCCurrentVCStackManager shareManager].getCurrentVC.navigationController pushViewController:dressUpVC animated:YES];
}
break;
case SecretaryRouterType_Nameplate:
{
XPMineDressUpViewController * dressUpVC = [[XPMineDressUpViewController alloc] init];
dressUpVC.currentIndex = 2;
[[XCCurrentVCStackManager shareManager].getCurrentVC.navigationController pushViewController:dressUpVC animated:YES];
}
break;
case SecretaryRouterType_Nobel_Bubble:
{
XPMineDressUpViewController * dressUpVC = [[XPMineDressUpViewController alloc] init];
dressUpVC.currentIndex = 4;
[[XCCurrentVCStackManager shareManager].getCurrentVC.navigationController pushViewController:dressUpVC animated:YES];
}
break;
case SecretaryRouterType_User_Card:
{
XPMineDressUpViewController * dressUpVC = [[XPMineDressUpViewController alloc] init];
dressUpVC.currentIndex = 3;
[[XCCurrentVCStackManager shareManager].getCurrentVC.navigationController pushViewController:dressUpVC animated:YES];
}
break;
case SecretaryRouterType_Set_Password:
{
[Api getUserInfo:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
if (code == 200) {
UserInfoModel * userInfo = [UserInfoModel modelWithDictionary:data.data];
if (!userInfo.isBindPhone) {
[XNDJTDDLoadingTool showErrorWithMessage:YMLocalizedString(@"MessageContentTextClickable0")];
return;
}
//登录密码
if (userInfo.isBindPasswd) {
XPMineLoginPasswordViewController *vc = [[XPMineLoginPasswordViewController alloc] init];
vc.userInfo = userInfo;
vc.isModifiPwd = YES;
[[XCCurrentVCStackManager shareManager].getCurrentVC.navigationController pushViewController:vc animated:YES];
} else {
XPMineLoginPasswordViewController *vc = [[XPMineLoginPasswordViewController alloc] init];
vc.userInfo = userInfo;
vc.isModifiPwd = NO;
[[XCCurrentVCStackManager shareManager].getCurrentVC.navigationController pushViewController:vc animated:YES];
}
}
} uid:[AccountInfoStorage instance].getUid];
}
break;
case SecretaryRouterType_Dressup_Shop:
{
XPDressUpShopViewController *vc = [[XPDressUpShopViewController alloc] init];
vc.currentIndex = [value integerValue];
[[XCCurrentVCStackManager shareManager].getCurrentVC.navigationController pushViewController:vc animated:YES];
}
break;
case SecretaryRouterType_My_Dressup:
{
XPMineDressUpViewController * dressUpVC = [[XPMineDressUpViewController alloc] init];
dressUpVC.currentIndex = [value integerValue];
[[XCCurrentVCStackManager shareManager].getCurrentVC.navigationController pushViewController:dressUpVC animated:YES];
}
break;
case SecretaryRouterType_Square_Topic:
{
XPMonentTopicContainerViewController *topicVC = [[XPMonentTopicContainerViewController alloc] init];
topicVC.worldId = value;
[[XCCurrentVCStackManager shareManager].getCurrentVC.navigationController pushViewController:topicVC animated:YES];
}
break;
default:
break;
}
}
- (UILabel *)messageText {
if (!_messageText) {
_messageText = [[UILabel alloc]initWithFrame:CGRectZero];
_messageText.preferredMaxLayoutWidth = CONTENT_WIDTH_MAX - MESSAGE_PADDING * 2;
_messageText.textColor = DJDKMIMOMColor.mainTextColor;
_messageText.numberOfLines = 0;
}
return _messageText;
}
- (UIView *)lineView {
if (!_lineView) {
_lineView = [[UIView alloc] init];
_lineView.backgroundColor = [DJDKMIMOMColor dividerColor];
}
return _lineView;
}
- (UIButton *)checkButton {
if (!_checkButton) {
_checkButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_checkButton setTitle:YMLocalizedString(@"MessageContentTweetView1") forState:UIControlStateNormal];
[_checkButton setTitleColor:UIColorFromRGB(0x4C5AF1) forState:UIControlStateNormal];
_checkButton.titleLabel.font = [UIFont systemFontOfSize:14];
[_checkButton addTarget:self action:@selector(checkButtonAction:) forControlEvents:UIControlEventTouchUpInside];
}
return _checkButton;
}
@end