完善了在线列表用户的数据以及点击展示用户卡片

This commit is contained in:
fengshuo
2021-12-30 12:06:24 +08:00
parent 3a066424b4
commit 614a2715a1
6 changed files with 580 additions and 25 deletions

View File

@@ -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 */,

View File

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

View File

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

View File

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

View File

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

View File

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