完善了在线列表用户的数据以及点击展示用户卡片
This commit is contained in:
@@ -291,6 +291,7 @@
|
||||
E896EFB62771D55500AD2CC1 /* FansInfoModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E896EFB52771D55500AD2CC1 /* FansInfoModel.m */; };
|
||||
E899C68927508F4E00E189E5 /* XPUserCardInfoModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E899C68827508F4E00E189E5 /* XPUserCardInfoModel.m */; };
|
||||
E899C68C275093B800E189E5 /* XPUserCardMicroItemModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E899C68B275093B800E189E5 /* XPUserCardMicroItemModel.m */; };
|
||||
E89BD7D4277D471100E31B19 /* XPRoomOnlineTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E89BD7D3277D471100E31B19 /* XPRoomOnlineTableViewCell.m */; };
|
||||
E89D60BA271D643A001F8895 /* Api+Room.m in Sources */ = {isa = PBXBuildFile; fileRef = E89D60B9271D643A001F8895 /* Api+Room.m */; };
|
||||
E89D60BD271D647A001F8895 /* XPRoomPresenter.m in Sources */ = {isa = PBXBuildFile; fileRef = E89D60BC271D647A001F8895 /* XPRoomPresenter.m */; };
|
||||
E89D60C1271D64B9001F8895 /* RoomInfoModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E89D60C0271D64B9001F8895 /* RoomInfoModel.m */; };
|
||||
@@ -981,6 +982,8 @@
|
||||
E899C68827508F4E00E189E5 /* XPUserCardInfoModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPUserCardInfoModel.m; sourceTree = "<group>"; };
|
||||
E899C68A275093B700E189E5 /* XPUserCardMicroItemModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPUserCardMicroItemModel.h; sourceTree = "<group>"; };
|
||||
E899C68B275093B800E189E5 /* XPUserCardMicroItemModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPUserCardMicroItemModel.m; sourceTree = "<group>"; };
|
||||
E89BD7D2277D471100E31B19 /* XPRoomOnlineTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPRoomOnlineTableViewCell.h; sourceTree = "<group>"; };
|
||||
E89BD7D3277D471100E31B19 /* XPRoomOnlineTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPRoomOnlineTableViewCell.m; sourceTree = "<group>"; };
|
||||
E89D60B8271D643A001F8895 /* Api+Room.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Api+Room.h"; sourceTree = "<group>"; };
|
||||
E89D60B9271D643A001F8895 /* Api+Room.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "Api+Room.m"; sourceTree = "<group>"; };
|
||||
E89D60BB271D647A001F8895 /* XPRoomPresenter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPRoomPresenter.h; sourceTree = "<group>"; };
|
||||
@@ -2379,6 +2382,8 @@
|
||||
E84BF7D9277C72AC00EF8877 /* XPRoomRoleTableViewCell.m */,
|
||||
E84BF7DB277C765400EF8877 /* XPRoomRoleEmptyTableViewCell.h */,
|
||||
E84BF7DC277C765400EF8877 /* XPRoomRoleEmptyTableViewCell.m */,
|
||||
E89BD7D2277D471100E31B19 /* XPRoomOnlineTableViewCell.h */,
|
||||
E89BD7D3277D471100E31B19 /* XPRoomOnlineTableViewCell.m */,
|
||||
);
|
||||
path = Cell;
|
||||
sourceTree = "<group>";
|
||||
@@ -3927,6 +3932,7 @@
|
||||
E8AC721626F46B06007D6E91 /* XPMineSettingTableViewCell.m in Sources */,
|
||||
18EE3FDF2750C1F700A452BF /* SessionListCell.m in Sources */,
|
||||
E80487652717DDD9008595F2 /* XPRoomMenuItem.m in Sources */,
|
||||
E89BD7D4277D471100E31B19 /* XPRoomOnlineTableViewCell.m in Sources */,
|
||||
E8412F9627795E34006E1101 /* XPRoomInviteFansView.m in Sources */,
|
||||
189DD75026E21D9000AB55B1 /* GCDHelper.m in Sources */,
|
||||
E82D5C76276AEB5100858D6D /* NameplateModel.m in Sources */,
|
||||
|
@@ -101,8 +101,7 @@
|
||||
}
|
||||
|
||||
- (void)onlineTapRecognizer {
|
||||
XPRoomOnLineViewController * onlineVC = [[XPRoomOnLineViewController alloc] init];
|
||||
onlineVC.roomId = [NSString stringWithFormat:@"%ld",self.hostDelegate.getRoomInfo.roomId];
|
||||
XPRoomOnLineViewController * onlineVC = [[XPRoomOnLineViewController alloc] initWithDelegate:self.hostDelegate];
|
||||
[self.hostDelegate.getCurrentNav pushViewController:onlineVC animated:YES];
|
||||
}
|
||||
|
||||
|
@@ -0,0 +1,19 @@
|
||||
//
|
||||
// XPRoomOnlineTableViewCell.h
|
||||
// xplan-ios
|
||||
//
|
||||
// Created by 冯硕 on 2021/12/30.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
@class NIMChatroomMember;
|
||||
@interface XPRoomOnlineTableViewCell : UITableViewCell
|
||||
///云信用户实体
|
||||
@property (strong, nonatomic) NIMChatroomMember *member;
|
||||
///是否在麦序上
|
||||
@property (nonatomic,assign) BOOL isOnMicro;
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
@@ -0,0 +1,350 @@
|
||||
//
|
||||
// XPRoomOnlineTableViewCell.m
|
||||
// xplan-ios
|
||||
//
|
||||
// Created by 冯硕 on 2021/12/30.
|
||||
//
|
||||
|
||||
#import "XPRoomOnlineTableViewCell.h"
|
||||
///Third
|
||||
#import <Masonry/Masonry.h>
|
||||
#import <NIMSDK/NIMSDK.h>
|
||||
///Tool
|
||||
#import "NetImageView.h"
|
||||
#import "ThemeColor.h"
|
||||
#import "UIImage+Utils.h"
|
||||
#import "XPMessageRemoteExtModel.h"
|
||||
|
||||
@interface XPRoomOnlineTableViewCell ()
|
||||
///显示头像
|
||||
@property (nonatomic,strong) NetImageView *avatarImageView;
|
||||
///性别
|
||||
@property (nonatomic,strong) UIImageView *sexImageView;
|
||||
///姓名 和 等级 总的容器
|
||||
@property (nonatomic,strong) UIStackView *stackView;
|
||||
///姓名的容器
|
||||
@property (nonatomic,strong) UIStackView *nickStackView;
|
||||
///显示姓名
|
||||
@property (nonatomic,strong) UILabel *nickLabel;
|
||||
///魅力等级 等级 铭牌
|
||||
@property (nonatomic,strong) UIStackView *tagStackView;
|
||||
///角色的
|
||||
@property (nonatomic,strong) UIButton *roleButton;
|
||||
///美丽等级
|
||||
@property (nonatomic,strong) NetImageView *charmImageView;
|
||||
///等级
|
||||
@property (nonatomic,strong) NetImageView *experImageView;
|
||||
///铭牌的容器
|
||||
@property (nonatomic,strong) UIView * namePlateView;
|
||||
///铭牌图片
|
||||
@property (nonatomic,strong) NetImageView *nameplateImageView;
|
||||
///铭牌文字
|
||||
@property (nonatomic,strong) UILabel *nameplateLabel;
|
||||
///分割线
|
||||
@property (nonatomic,strong) UIView * lineView;
|
||||
///在麦上显示标签
|
||||
@property (strong, nonatomic) UILabel *onMicroStatusLabel;
|
||||
@end
|
||||
|
||||
@implementation XPRoomOnlineTableViewCell
|
||||
|
||||
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
|
||||
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
|
||||
[self initSubViews];
|
||||
[self initSubViewConstraints];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
#pragma mark - Private Method
|
||||
- (void)initSubViews {
|
||||
self.backgroundColor = [UIColor clearColor];
|
||||
self.selectionStyle = UITableViewCellSelectionStyleNone;
|
||||
[self.contentView addSubview:self.avatarImageView];
|
||||
[self.contentView addSubview:self.stackView];
|
||||
[self.contentView addSubview:self.lineView];
|
||||
[self.contentView addSubview:self.onMicroStatusLabel];
|
||||
|
||||
[self.stackView addArrangedSubview:self.nickStackView];
|
||||
[self.stackView addArrangedSubview:self.tagStackView];
|
||||
|
||||
[self.nickStackView addArrangedSubview:self.nickLabel];
|
||||
[self.nickStackView addArrangedSubview:self.sexImageView];
|
||||
|
||||
[self.tagStackView addArrangedSubview:self.roleButton];
|
||||
[self.tagStackView addArrangedSubview:self.experImageView];
|
||||
[self.tagStackView addArrangedSubview:self.charmImageView];
|
||||
[self.tagStackView addArrangedSubview:self.namePlateView];
|
||||
|
||||
///铭牌
|
||||
[self.namePlateView addSubview:self.nameplateImageView];
|
||||
[self.namePlateView addSubview:self.nameplateLabel];
|
||||
}
|
||||
|
||||
- (void)initSubViewConstraints {
|
||||
[self.avatarImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.mas_equalTo(self.contentView).offset(15);
|
||||
make.width.height.mas_equalTo(40);
|
||||
make.centerY.mas_equalTo(self.contentView.mas_centerY);
|
||||
}];
|
||||
|
||||
[self.stackView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.centerY.mas_equalTo(self);
|
||||
make.left.mas_equalTo(self.avatarImageView.mas_right).offset(10);
|
||||
}];
|
||||
|
||||
[self.tagStackView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.height.mas_equalTo(25);
|
||||
}];
|
||||
|
||||
[self.roleButton mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.size.mas_equalTo(CGSizeMake(38, 15));
|
||||
}];
|
||||
|
||||
[self.experImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.width.height.mas_equalTo(25);
|
||||
}];
|
||||
|
||||
[self.charmImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.width.height.mas_equalTo(25);
|
||||
}];
|
||||
|
||||
[self.namePlateView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.height.mas_equalTo(25);
|
||||
make.width.mas_equalTo(self.nameplateImageView.mas_width);
|
||||
}];
|
||||
|
||||
|
||||
[self.nameplateImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.height.mas_equalTo(25);
|
||||
make.width.mas_equalTo(60);
|
||||
make.left.top.mas_equalTo(self.namePlateView);
|
||||
}];
|
||||
|
||||
[self.nameplateLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.top.bottom.mas_equalTo(self.nameplateImageView);
|
||||
make.right.mas_equalTo(self.namePlateView).offset(-2);
|
||||
}];
|
||||
|
||||
[self.lineView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.mas_equalTo(self.nickLabel);
|
||||
make.right.mas_equalTo(self.contentView).offset(-15);
|
||||
make.bottom.mas_equalTo(self.contentView);
|
||||
make.height.mas_equalTo(0.5);
|
||||
}];
|
||||
|
||||
[self.onMicroStatusLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.centerY.mas_equalTo(self.contentView);
|
||||
make.right.mas_equalTo(-15);
|
||||
make.width.mas_equalTo(32);
|
||||
make.height.mas_equalTo(14);
|
||||
}];
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - Getters And Setters
|
||||
- (void)setMember:(NIMChatroomMember *)member {
|
||||
_member = member;
|
||||
if (_member) {
|
||||
self.avatarImageView.imageUrl = _member.roomAvatar;
|
||||
self.nickLabel.text = _member.roomNickname;
|
||||
NIMUser *user = [[NIMSDK sharedSDK].userManager userInfo:_member.userId];
|
||||
self.sexImageView.image = user.userInfo.gender == NIMUserGenderFemale ? [UIImage imageNamed:@"common_female"] : [UIImage imageNamed:@"common_male"];
|
||||
NSDictionary * extDic = [member.roomExt toJSONObject];
|
||||
if (extDic.allKeys.count > 0 || (member.type == NIMTeamMemberTypeOwner || member.type == NIMChatroomMemberTypeManager)) {
|
||||
self.tagStackView.hidden = NO;
|
||||
XPMessageRemoteExtModel * userInfo = [XPMessageRemoteExtModel modelWithDictionary:[extDic objectForKey:member.userId]];
|
||||
|
||||
if (userInfo.experUrl) {
|
||||
self.experImageView.imageUrl = userInfo.experUrl;
|
||||
}
|
||||
self.experImageView.hidden = userInfo.experUrl.length <= 0;
|
||||
|
||||
if (userInfo.charmUrl) {
|
||||
self.charmImageView.imageUrl = userInfo.charmUrl;
|
||||
}
|
||||
self.charmImageView.hidden = userInfo.charmUrl.length <= 0;
|
||||
|
||||
if (userInfo.inRoomNameplatePic.length>0 && userInfo.inRoomNameplateWord.length>0) {
|
||||
self.nameplateImageView.imageUrl = userInfo.inRoomNameplatePic;
|
||||
self.nameplateLabel.text = userInfo.inRoomNameplateWord;
|
||||
self.namePlateView.hidden = NO;
|
||||
} else {
|
||||
self.namePlateView.hidden = YES;
|
||||
}
|
||||
|
||||
if (_member.type == NIMTeamMemberTypeOwner) {
|
||||
self.roleButton.hidden = NO;
|
||||
[self.roleButton setBackgroundColor:[ThemeColor appEmphasizeColor2]];
|
||||
[self.roleButton setTitle:@"房主" forState:UIControlStateNormal];
|
||||
} else if(_member.type == NIMChatroomMemberTypeManager) {
|
||||
self.roleButton.hidden = NO;
|
||||
[self.roleButton setBackgroundColor:[ThemeColor appEmphasizeColor]];
|
||||
[self.roleButton setTitle:@"管理员" forState:UIControlStateNormal];
|
||||
} else {
|
||||
self.roleButton.hidden = YES;
|
||||
}
|
||||
} else {
|
||||
self.tagStackView.hidden = YES;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
- (void)setIsOnMicro:(BOOL)isOnMicro {
|
||||
self.onMicroStatusLabel.hidden = !isOnMicro;
|
||||
}
|
||||
|
||||
- (NetImageView *)avatarImageView {
|
||||
if (!_avatarImageView) {
|
||||
NetImageConfig * config = [[NetImageConfig alloc]init];
|
||||
config.imageType = ImageTypeUserIcon;
|
||||
config.placeHolder = [UIImageConstant defaultAvatarPlaceholder];
|
||||
_avatarImageView = [[NetImageView alloc] initWithConfig:config];
|
||||
_avatarImageView.layer.masksToBounds = YES;
|
||||
_avatarImageView.layer.cornerRadius = 40/2;
|
||||
_avatarImageView.layer.borderColor = [ThemeColor appMainColor].CGColor;
|
||||
}
|
||||
return _avatarImageView;
|
||||
}
|
||||
|
||||
- (UIImageView *)sexImageView {
|
||||
if (!_sexImageView) {
|
||||
_sexImageView = [[UIImageView alloc] init];
|
||||
_sexImageView.userInteractionEnabled = YES;
|
||||
}
|
||||
return _sexImageView;
|
||||
}
|
||||
|
||||
- (UILabel *)nickLabel {
|
||||
if (!_nickLabel) {
|
||||
_nickLabel = [[UILabel alloc] init];
|
||||
_nickLabel.font = [UIFont systemFontOfSize:15];
|
||||
_nickLabel.textColor = [UIColor whiteColor];
|
||||
}
|
||||
return _nickLabel;
|
||||
}
|
||||
|
||||
- (UIStackView *)stackView {
|
||||
if (!_stackView) {
|
||||
_stackView = [[UIStackView alloc] init];
|
||||
_stackView.axis = UILayoutConstraintAxisVertical;
|
||||
_stackView.distribution = UIStackViewDistributionFillProportionally;
|
||||
_stackView.alignment = UIStackViewAlignmentLeading;
|
||||
_stackView.spacing = 5;
|
||||
}
|
||||
return _stackView;
|
||||
}
|
||||
|
||||
- (UIStackView *)nickStackView {
|
||||
if (!_nickStackView) {
|
||||
_nickStackView = [[UIStackView alloc] init];
|
||||
_nickStackView.axis = UILayoutConstraintAxisHorizontal;
|
||||
_nickStackView.distribution = UIStackViewDistributionFill;
|
||||
_nickStackView.alignment = UIStackViewAlignmentCenter;
|
||||
_nickStackView.spacing = 3;
|
||||
}
|
||||
return _nickStackView;
|
||||
}
|
||||
|
||||
- (UIStackView *)tagStackView {
|
||||
if (!_tagStackView) {
|
||||
_tagStackView = [[UIStackView alloc] init];
|
||||
_tagStackView.axis = UILayoutConstraintAxisHorizontal;
|
||||
_tagStackView.distribution = UIStackViewDistributionFill;
|
||||
_tagStackView.alignment = UIStackViewAlignmentCenter;
|
||||
_tagStackView.spacing = 2;
|
||||
}
|
||||
return _tagStackView;
|
||||
}
|
||||
- (NetImageView *)experImageView {
|
||||
if (!_experImageView) {
|
||||
NetImageConfig * config = [[NetImageConfig alloc] init];
|
||||
config.placeHolder = [UIImageConstant defaultAvatarPlaceholder];
|
||||
config.imageType = ImageTypeUserCardLevel;
|
||||
_experImageView = [[NetImageView alloc] initWithConfig:config];
|
||||
_experImageView.userInteractionEnabled = YES;
|
||||
_experImageView.hidden = YES;
|
||||
_experImageView.contentMode = UIViewContentModeScaleAspectFit;
|
||||
}
|
||||
return _experImageView;
|
||||
}
|
||||
|
||||
- (NetImageView *)charmImageView {
|
||||
if (!_charmImageView) {
|
||||
NetImageConfig * config = [[NetImageConfig alloc] init];
|
||||
config.placeHolder = [UIImageConstant defaultAvatarPlaceholder];
|
||||
config.imageType = ImageTypeUserCardLevel;
|
||||
_charmImageView = [[NetImageView alloc] initWithConfig:config];
|
||||
_charmImageView.userInteractionEnabled = YES;
|
||||
_charmImageView.hidden = YES;
|
||||
_charmImageView.contentMode = UIViewContentModeScaleAspectFit;
|
||||
}
|
||||
return _charmImageView;
|
||||
}
|
||||
|
||||
- (UIView *)namePlateView {
|
||||
if (!_namePlateView) {
|
||||
_namePlateView = [[UIView alloc] init];
|
||||
_namePlateView.backgroundColor = [UIColor clearColor];
|
||||
_namePlateView.hidden = YES;
|
||||
}
|
||||
return _namePlateView;
|
||||
}
|
||||
|
||||
- (NetImageView *)nameplateImageView {
|
||||
if (!_nameplateImageView) {
|
||||
NetImageConfig * config = [[NetImageConfig alloc] init];
|
||||
config.placeHolder = [UIImageConstant defaultAvatarPlaceholder];
|
||||
config.imageType = ImageTypeUserCardLevel;
|
||||
_nameplateImageView = [[NetImageView alloc] initWithConfig:config];
|
||||
_nameplateImageView.userInteractionEnabled = YES;
|
||||
_nameplateImageView.contentMode = UIViewContentModeScaleAspectFit;
|
||||
}
|
||||
return _nameplateImageView;
|
||||
}
|
||||
|
||||
- (UILabel *)nameplateLabel {
|
||||
if (!_nameplateLabel) {
|
||||
_nameplateLabel = [[UILabel alloc] init];
|
||||
_nameplateLabel.font = [UIFont systemFontOfSize:10];
|
||||
_nameplateLabel.textAlignment = NSTextAlignmentCenter;
|
||||
_nameplateLabel.textColor = [UIColor whiteColor];
|
||||
}
|
||||
return _nameplateLabel;
|
||||
}
|
||||
|
||||
- (UIView *)lineView {
|
||||
if (!_lineView) {
|
||||
_lineView = [[UIView alloc] init];
|
||||
_lineView.backgroundColor = [UIColor colorWithWhite:1 alpha:0.1];
|
||||
}
|
||||
return _lineView;
|
||||
}
|
||||
|
||||
- (UIButton *)roleButton {
|
||||
if (!_roleButton) {
|
||||
_roleButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||
[_roleButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
|
||||
_roleButton.titleLabel.font = [UIFont systemFontOfSize:10];
|
||||
_roleButton.layer.masksToBounds = YES;
|
||||
_roleButton.layer.cornerRadius = 15 / 2;
|
||||
}
|
||||
return _roleButton;
|
||||
}
|
||||
|
||||
- (UILabel *)onMicroStatusLabel {
|
||||
if (!_onMicroStatusLabel) {
|
||||
_onMicroStatusLabel = [[UILabel alloc] init];
|
||||
_onMicroStatusLabel.text = @"上麦";
|
||||
_onMicroStatusLabel.textColor = UIColor.whiteColor;
|
||||
_onMicroStatusLabel.font = [UIFont systemFontOfSize:10];
|
||||
_onMicroStatusLabel.textAlignment = NSTextAlignmentCenter;
|
||||
_onMicroStatusLabel.layer.cornerRadius = 7;
|
||||
_onMicroStatusLabel.layer.masksToBounds = YES;
|
||||
_onMicroStatusLabel.backgroundColor = [ThemeColor appEmphasizeColor];
|
||||
}
|
||||
return _onMicroStatusLabel;
|
||||
}
|
||||
|
||||
@end
|
@@ -6,12 +6,12 @@
|
||||
//
|
||||
|
||||
#import "BaseViewController.h"
|
||||
|
||||
#import "RoomHostDelegate.h"
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface XPRoomOnLineViewController : BaseViewController
|
||||
///房间的id
|
||||
@property (nonatomic,copy) NSString *roomId;
|
||||
|
||||
- (instancetype)initWithDelegate:(id<RoomHostDelegate>)delegate;
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
@@ -14,10 +14,27 @@
|
||||
///Tool
|
||||
#import "ThemeColor.h"
|
||||
#import "XPMacro.h"
|
||||
#import "XPRoomRoleTableViewCell.h"
|
||||
#import "UIButton+EnlargeTouchArea.h"
|
||||
///Model
|
||||
#import "UserInfoModel.h"
|
||||
#import "MicroQueueModel.h"
|
||||
#import "RoomInfoModel.h"
|
||||
#import "XPUserCardInfoModel.h"
|
||||
///View
|
||||
#import "XPRoomOnlineTableViewCell.h"
|
||||
#import "XPRoomRoleEmptyTableViewCell.h"
|
||||
///VC
|
||||
#import "XPUserCardViewController.h"
|
||||
|
||||
@interface XPRoomOnLineViewController ()<UITableViewDelegate, UITableViewDataSource, XPRoomRoleTableViewCellDelegate>
|
||||
@interface XPRoomOnLineViewController ()<UITableViewDelegate, UITableViewDataSource, NIMChatManagerDelegate>
|
||||
///导航栏
|
||||
@property (nonatomic,strong) UIView * navView;
|
||||
///返回按钮
|
||||
@property (nonatomic,strong) UIButton *backButton;
|
||||
///显示标题
|
||||
@property (nonatomic,strong) UILabel *titleLabel;
|
||||
///背景图
|
||||
@property (nonatomic,strong) UIImageView *backImageView;
|
||||
///总的数据
|
||||
@property (nonatomic,strong) NSMutableArray *originArray;
|
||||
///需要显示的数据
|
||||
@@ -28,12 +45,38 @@
|
||||
@property (nonatomic,strong) NIMChatroomMember *lastMember;
|
||||
///临时成员最后一个
|
||||
@property (nonatomic,strong) NIMChatroomMember *tmpLastMember;
|
||||
///host
|
||||
@property (nonatomic,weak) id<RoomHostDelegate>hostDelegate;
|
||||
///房间的id
|
||||
@property (nonatomic,copy) NSString *roomId;
|
||||
@end
|
||||
|
||||
@implementation XPRoomOnLineViewController
|
||||
- (void)dealloc {
|
||||
[[NIMSDK sharedSDK].chatManager removeDelegate:self];
|
||||
}
|
||||
|
||||
- (instancetype)initWithDelegate:(id<RoomHostDelegate>)delegate {
|
||||
if (self = [super init]) {
|
||||
self.hostDelegate = delegate;
|
||||
self.roomId= [NSString stringWithFormat:@"%ld", self.hostDelegate.getRoomInfo.roomId];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (BOOL)isHiddenNavBar {
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (void)viewWillAppear:(BOOL)animated {
|
||||
[super viewWillAppear:animated];
|
||||
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
|
||||
}
|
||||
|
||||
- (void)viewDidLoad {
|
||||
[super viewDidLoad];
|
||||
//监听云信消息
|
||||
[[NIMSDK sharedSDK].chatManager addDelegate:self];
|
||||
[self initHeaderAndFooterRrfresh];
|
||||
[self initSubViews];
|
||||
[self initSubViewConstraints];
|
||||
@@ -41,13 +84,39 @@
|
||||
|
||||
#pragma mark - Private Method
|
||||
- (void)initSubViews {
|
||||
[self.view addSubview:self.backImageView];
|
||||
[self.view addSubview:self.tableView];
|
||||
[self.view addSubview:self.navView];
|
||||
|
||||
[self.navView addSubview:self.backButton];
|
||||
[self.navView addSubview:self.titleLabel];
|
||||
}
|
||||
|
||||
- (void)initSubViewConstraints {
|
||||
[self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
[self.backImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.edges.mas_equalTo(self.view);
|
||||
}];
|
||||
|
||||
[self.navView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.right.top.mas_equalTo(self.view);
|
||||
make.height.mas_equalTo(kNavigationHeight);
|
||||
}];
|
||||
|
||||
[self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.right.bottom.mas_equalTo(self.view);
|
||||
make.top.mas_equalTo(self.navView.mas_bottom);
|
||||
}];
|
||||
|
||||
[self.backButton mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.size.mas_equalTo(CGSizeMake(22, 22));
|
||||
make.left.mas_equalTo(self.navView).offset(8);
|
||||
make.centerY.mas_equalTo(self.titleLabel);
|
||||
}];
|
||||
|
||||
[self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.centerX.mas_equalTo(self.navView);
|
||||
make.centerY.equalTo(self.navView.mas_bottom).mas_offset(-22);
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)initHeaderAndFooterRrfresh {
|
||||
@@ -122,8 +191,6 @@
|
||||
request.lastMember = self.lastMember;
|
||||
request.limit = 200;
|
||||
[[NIMSDK sharedSDK].chatroomManager fetchChatroomMembers:request completion:^(NSError * _Nullable error, NSArray<NIMChatroomMember *> * _Nullable members) {
|
||||
[self.tableView.mj_header endRefreshing];
|
||||
[self.tableView.mj_footer endRefreshing];
|
||||
if (error == nil) {
|
||||
if (members.count > 0) {
|
||||
self.lastMember = members.lastObject;
|
||||
@@ -177,6 +244,54 @@
|
||||
}];
|
||||
}
|
||||
|
||||
///判断是否在麦上
|
||||
- (BOOL)memberIsOnMicro:(NSString *)userId{
|
||||
NSArray *chatRoomMicSequences = [self.hostDelegate.getMicroQueue allValues] ;
|
||||
if (chatRoomMicSequences != nil && chatRoomMicSequences.count > 0) {
|
||||
for (int i = 0; i < chatRoomMicSequences.count; i ++) {
|
||||
MicroQueueModel *chatRoomMicSequence = chatRoomMicSequences[i];
|
||||
if (chatRoomMicSequence.userInfo.uid == userId.integerValue) {
|
||||
return YES;
|
||||
}
|
||||
}
|
||||
}
|
||||
return NO;
|
||||
}
|
||||
|
||||
#pragma mark - NIMChatManagerDelegate
|
||||
- (void)onRecvMessages:(NSArray<NIMMessage *> *)messages {
|
||||
for (NIMMessage * message in messages) {
|
||||
// 非房间内消息不处理
|
||||
if (message.session.sessionType != NIMSessionTypeChatroom) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// 非本房间不处理
|
||||
if (![message.session.sessionId isEqualToString:self.roomId]) {
|
||||
continue;
|
||||
}
|
||||
if (message.messageType == NIMMessageTypeNotification) {
|
||||
NIMNotificationObject *notiMsg = (NIMNotificationObject *)message.messageObject;
|
||||
NIMChatroomNotificationContent *content = (NIMChatroomNotificationContent *)notiMsg.content;
|
||||
switch (content.eventType) {
|
||||
case NIMChatroomEventTypeEnter:
|
||||
case NIMChatroomEventTypeExit:
|
||||
case NIMChatroomEventTypeAddManager:
|
||||
case NIMChatroomEventTypeRemoveManager:
|
||||
case NIMChatroomEventTypeAddBlack:
|
||||
case NIMChatroomEventTypeRemoveBlack:
|
||||
case NIMChatroomEventTypeQueueChange:
|
||||
case NIMChatroomEventTypeKicked:
|
||||
[self headerRefresh];
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark - UITableViewDelegate And UITableViewDataSource
|
||||
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
|
||||
@@ -185,17 +300,13 @@
|
||||
|
||||
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||
if (self.datasource.count > 0) {
|
||||
XPRoomRoleTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPRoomRoleTableViewCell class])];
|
||||
XPRoomOnlineTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPRoomOnlineTableViewCell class])];
|
||||
if (cell == nil) {
|
||||
cell = [[XPRoomRoleTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NSStringFromClass([XPRoomRoleTableViewCell class])];
|
||||
}
|
||||
cell.delegate = self;
|
||||
cell.member = [self.datasource objectAtIndex:indexPath.row];
|
||||
if (indexPath.row == (self.datasource.count -1)) {
|
||||
cell.lineView.hidden = YES;
|
||||
} else {
|
||||
cell.lineView.hidden = NO;
|
||||
cell = [[XPRoomOnlineTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NSStringFromClass([XPRoomOnlineTableViewCell class])];
|
||||
}
|
||||
NIMChatroomMember * member = [self.datasource objectAtIndex:indexPath.row];
|
||||
cell.member = member;
|
||||
cell.isOnMicro = [self memberIsOnMicro:member.userId];
|
||||
return cell;
|
||||
}
|
||||
|
||||
@@ -204,22 +315,50 @@
|
||||
cell = [[XPRoomRoleEmptyTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NSStringFromClass([XPRoomRoleEmptyTableViewCell class])];
|
||||
}
|
||||
cell.titleLabel.text = @"暂没有房间成员在线";
|
||||
cell.backgroundColor = [UIColor clearColor];
|
||||
return cell;
|
||||
}
|
||||
|
||||
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||
if (self.datasource.count > 0) {
|
||||
return 55;
|
||||
return 60;
|
||||
}
|
||||
|
||||
return KScreenHeight - kNavigationHeight;
|
||||
}
|
||||
|
||||
#pragma mark - XPRoomRoleTableViewCellDelegate
|
||||
- (void)xPRoomRoleTableViewCell:(NSString *)view didClickMember:(NIMChatroomMember *)member {
|
||||
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||
[tableView deselectRowAtIndexPath:indexPath animated:YES];
|
||||
if (self.datasource.count > 0) {
|
||||
NIMChatroomMember * member = [self.datasource objectAtIndex:indexPath.row];
|
||||
RoomInfoModel * roomInfo = self.hostDelegate.getRoomInfo;
|
||||
NSString * targetUid = member.userId;
|
||||
XPUserCardInfoModel * model = [[XPUserCardInfoModel alloc] init];
|
||||
[[self.hostDelegate.getMicroQueue allValues] enumerateObjectsUsingBlock:^(MicroQueueModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
|
||||
if (targetUid.integerValue == obj.userInfo.uid) {
|
||||
model.position = [NSString stringWithFormat:@"%d", obj.microState.position];
|
||||
model.posState = (UserCardMicroPosStateType)obj.microState.posState;
|
||||
model.micState = (UserCardMicroMicStateType)obj.microState.micState;
|
||||
*stop = YES;
|
||||
}
|
||||
}];
|
||||
model.uid = targetUid;
|
||||
model.roomId = [NSString stringWithFormat:@"%ld", roomInfo.roomId];
|
||||
model.leaveMode = roomInfo.leaveMode;
|
||||
model.showGiftValue = roomInfo.showGiftValue;
|
||||
model.avatar = roomInfo.avatar;
|
||||
model.roomUid = [NSString stringWithFormat:@"%ld", roomInfo.uid];
|
||||
model.nick = member.roomNickname;
|
||||
model.delegate = self.hostDelegate;
|
||||
XPUserCardViewController * userCardVC = [[XPUserCardViewController alloc] initWithUser:model];
|
||||
[self.navigationController presentViewController:userCardVC animated:YES completion:nil];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#pragma mark - Event Response
|
||||
- (void)backButtonAction:(UIButton *)sender {
|
||||
[self.navigationController popViewControllerAnimated:YES];
|
||||
}
|
||||
|
||||
#pragma mark - Getters And Setters
|
||||
- (UITableView *)tableView {
|
||||
@@ -234,12 +373,54 @@
|
||||
if (@available(iOS 11.0, *)) {
|
||||
_tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
|
||||
}
|
||||
[_tableView registerClass:[XPRoomRoleTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPRoomRoleTableViewCell class])];
|
||||
[_tableView registerClass:[XPRoomOnlineTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPRoomOnlineTableViewCell class])];
|
||||
[_tableView registerClass:[XPRoomRoleEmptyTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPRoomRoleEmptyTableViewCell class])];
|
||||
}
|
||||
return _tableView;
|
||||
}
|
||||
|
||||
- (UIButton *)backButton {
|
||||
if (!_backButton) {
|
||||
_backButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||
[_backButton setImage:[UIImage imageNamed:@"home_search_white_back"] forState:UIControlStateNormal];
|
||||
[_backButton addTarget:self action:@selector(backButtonAction:) forControlEvents:UIControlEventTouchUpInside];
|
||||
[_backButton setEnlargeEdgeWithTop:10 right:10 bottom:10 left:10];
|
||||
}
|
||||
return _backButton;
|
||||
}
|
||||
|
||||
- (UILabel *)titleLabel {
|
||||
if (!_titleLabel) {
|
||||
_titleLabel = [[UILabel alloc] init];
|
||||
_titleLabel.textAlignment = NSTextAlignmentCenter;
|
||||
_titleLabel.font = [UIFont systemFontOfSize:15];
|
||||
_titleLabel.text = @"在线列表";
|
||||
_titleLabel.textColor = [UIColor whiteColor];
|
||||
}
|
||||
return _titleLabel;
|
||||
}
|
||||
|
||||
- (UIView *)navView {
|
||||
if (!_navView) {
|
||||
_navView = [[UIView alloc] init];
|
||||
_navView.backgroundColor = [UIColor clearColor];
|
||||
}
|
||||
return _navView;
|
||||
}
|
||||
|
||||
|
||||
- (UIImageView *)backImageView {
|
||||
if (!_backImageView) {
|
||||
_backImageView = [[UIImageView alloc] init];
|
||||
_backImageView.userInteractionEnabled = YES;
|
||||
_backImageView.layer.masksToBounds = YES;
|
||||
_backImageView.contentMode = UIViewContentModeScaleAspectFill;
|
||||
_backImageView.image = [UIImage imageNamed:@"room_background"];
|
||||
}
|
||||
return _backImageView;
|
||||
}
|
||||
|
||||
|
||||
- (NSMutableArray *)datasource {
|
||||
if (!_datasource) {
|
||||
_datasource = [NSMutableArray array];
|
||||
|
Reference in New Issue
Block a user