Ver código fonte

群主标记

Steven 2 anos atrás
pai
commit
eec17ae594
19 arquivos alterados com 233 adições e 53 exclusões
  1. 8 2
      KulexiuForStudent/KulexiuForStudent.xcodeproj/project.pbxproj
  2. BIN
      KulexiuForStudent/KulexiuForStudent.xcworkspace/xcuserdata/wangzhi.xcuserdatad/UserInterfaceState.xcuserstate
  3. 53 21
      KulexiuForStudent/KulexiuForStudent.xcworkspace/xcuserdata/wangzhi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
  4. 22 0
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Chat/group_owner.imageset/Contents.json
  5. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Chat/group_owner.imageset/group_owner@2x.png
  6. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Chat/group_owner.imageset/group_owner@3x.png
  7. 22 0
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Chat/group_ownerList.imageset/Contents.json
  8. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Chat/group_ownerList.imageset/group_ownerList@2x.png
  9. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Chat/group_ownerList.imageset/group_ownerList@3x.png
  10. 9 9
      KulexiuForStudent/KulexiuForStudent/Common/Base/KSAccompanyWebViewController.m
  11. 4 2
      KulexiuForStudent/KulexiuForStudent/Common/Base/KSRCIMDataSource.m
  12. 14 14
      KulexiuForStudent/KulexiuForStudent/Common/Define/PrefixHeader.pch
  13. 28 1
      KulexiuForStudent/KulexiuForStudent/Module/Chat/Controller/KSChatConversationViewController.m
  14. 3 0
      KulexiuForStudent/KulexiuForStudent/Module/Chat/Group/Controller/GroupMemberViewController.m
  15. 3 0
      KulexiuForStudent/KulexiuForStudent/Module/Chat/Group/Controller/GroupSettingViewController.m
  16. 14 0
      KulexiuForStudent/KulexiuForStudent/Module/Chat/Group/View/GroupMemberListCell.m
  17. 17 4
      KulexiuForStudent/KulexiuForStudent/Module/Chat/Group/View/GroupMemberListCell.xib
  18. 16 0
      KulexiuForStudent/KulexiuForStudent/Module/Chat/View/KSGroupTagImageView.h
  19. 20 0
      KulexiuForStudent/KulexiuForStudent/Module/Chat/View/KSGroupTagImageView.m

+ 8 - 2
KulexiuForStudent/KulexiuForStudent.xcodeproj/project.pbxproj

@@ -792,6 +792,7 @@
 		BCD457AF28646B580010B493 /* NoticeSourceModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BCD457AE28646B580010B493 /* NoticeSourceModel.m */; };
 		BCDE35862893B0E200A9A560 /* KSLoadingSuccessView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCDE35852893B0E200A9A560 /* KSLoadingSuccessView.m */; };
 		BCDE35882897B40000A9A560 /* shareImage@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = BCDE35872897B40000A9A560 /* shareImage@2x.png */; };
+		BCDE358E289A7D8700A9A560 /* KSGroupTagImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCDE358D289A7D8700A9A560 /* KSGroupTagImageView.m */; };
 		BCEBB8E82840B87100A76BE8 /* KSLiveChatroomMemberUp.m in Sources */ = {isa = PBXBuildFile; fileRef = BCEBB8E72840B87100A76BE8 /* KSLiveChatroomMemberUp.m */; };
 		BCED5CA7284F55A0009A42DE /* FriendListModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BCED5CA6284F55A0009A42DE /* FriendListModel.m */; };
 		BCFE53E72812765600AD6786 /* HomeHotAlbumCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFE53E52812765600AD6786 /* HomeHotAlbumCell.m */; };
@@ -2202,6 +2203,8 @@
 		BCDE35842893B0E200A9A560 /* KSLoadingSuccessView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KSLoadingSuccessView.h; sourceTree = "<group>"; };
 		BCDE35852893B0E200A9A560 /* KSLoadingSuccessView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KSLoadingSuccessView.m; sourceTree = "<group>"; };
 		BCDE35872897B40000A9A560 /* shareImage@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "shareImage@2x.png"; sourceTree = "<group>"; };
+		BCDE358C289A7D8700A9A560 /* KSGroupTagImageView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KSGroupTagImageView.h; sourceTree = "<group>"; };
+		BCDE358D289A7D8700A9A560 /* KSGroupTagImageView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KSGroupTagImageView.m; sourceTree = "<group>"; };
 		BCEBB8E62840B87100A76BE8 /* KSLiveChatroomMemberUp.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KSLiveChatroomMemberUp.h; sourceTree = "<group>"; };
 		BCEBB8E72840B87100A76BE8 /* KSLiveChatroomMemberUp.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KSLiveChatroomMemberUp.m; sourceTree = "<group>"; };
 		BCED5CA5284F55A0009A42DE /* FriendListModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FriendListModel.h; sourceTree = "<group>"; };
@@ -2788,6 +2791,8 @@
 				BCB908E52850B08C00F5FF69 /* ShareMusicCellContentView.h */,
 				BCB908E82850B08C00F5FF69 /* ShareMusicCellContentView.m */,
 				BCB908EC2850B08D00F5FF69 /* ShareMusicCellContentView.xib */,
+				BCDE358C289A7D8700A9A560 /* KSGroupTagImageView.h */,
+				BCDE358D289A7D8700A9A560 /* KSGroupTagImageView.m */,
 			);
 			path = View;
 			sourceTree = "<group>";
@@ -5042,10 +5047,10 @@
 			isa = PBXGroup;
 			children = (
 				BCB634D727F6D2A300ACFDCF /* KSWhiteboardControl.h */,
+				BCB634DB27F6D2A300ACFDCF /* KSWhiteboardControl.m */,
+				BCB634DA27F6D2A300ACFDCF /* KSWhiteboardView.h */,
 				BCB634D827F6D2A300ACFDCF /* KSWhiteboardView.m */,
 				BCB634D927F6D2A300ACFDCF /* WhiteUtils.h */,
-				BCB634DA27F6D2A300ACFDCF /* KSWhiteboardView.h */,
-				BCB634DB27F6D2A300ACFDCF /* KSWhiteboardControl.m */,
 				BCB634DC27F6D2A300ACFDCF /* WhiteUtils.m */,
 			);
 			path = NewWhiteboard;
@@ -6255,6 +6260,7 @@
 				BCB9FA4A286EDE1A005D766B /* BaseAlertView.m in Sources */,
 				2779355B27E324A70010E277 /* KSStatusView.m in Sources */,
 				2779355227E324A70010E277 /* VoMemoryCache.m in Sources */,
+				BCDE358E289A7D8700A9A560 /* KSGroupTagImageView.m in Sources */,
 				2779352A27E324A60010E277 /* UIView+Dealloc.m in Sources */,
 				2779352D27E324A60010E277 /* NSString+CZHSizeExtension.m in Sources */,
 				BC8C2C7E28265D8E00FBA5D5 /* KSNewsAlert.m in Sources */,

BIN
KulexiuForStudent/KulexiuForStudent.xcworkspace/xcuserdata/wangzhi.xcuserdatad/UserInterfaceState.xcuserstate


+ 53 - 21
KulexiuForStudent/KulexiuForStudent.xcworkspace/xcuserdata/wangzhi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -119,22 +119,6 @@
       <BreakpointProxy
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
-            uuid = "F53A81DF-DEA1-44C0-AE61-B91D63310BA8"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "KulexiuForStudent/Common/Base/KSUpdateAlert.m"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "48"
-            endingLineNumber = "48"
-            landmarkName = "-configWithMemo:desc:isForce:callback:"
-            landmarkType = "7">
-         </BreakpointContent>
-      </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
             uuid = "4A8E528F-160D-4E33-80AE-27A9D27CA5AC"
             shouldBeEnabled = "No"
             ignoreCount = "0"
@@ -375,16 +359,64 @@
       <BreakpointProxy
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
-            uuid = "2B1E56CA-1284-4CC0-83B7-59B5BCD8AB3F"
+            uuid = "CF01C9DB-69D3-403A-A67C-C93FA1CF2E4F"
+            shouldBeEnabled = "No"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "KulexiuForStudent/Common/Base/KSAccompanyWebViewController.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "466"
+            endingLineNumber = "466"
+            landmarkName = "-userContentController:didReceiveScriptMessage:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "A42FEBAA-470F-4727-B0BA-60E636EF9574"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "KulexiuForStudent/Module/CloudEngine/MidiPlayer/MidiPlayerEngine.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "612"
+            endingLineNumber = "612"
+            landmarkName = "-getTrackNumerFromName:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "2FBC833B-DBFD-4A74-9D33-23A51A99793F"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "KulexiuForStudent/Module/CloudEngine/MidiPlayer/MidiPlayerEngine.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "599"
+            endingLineNumber = "599"
+            landmarkName = "-getSingleTrackNumByName:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "AA5D573A-E0C7-44B8-A12B-94C8C02ADD0E"
             shouldBeEnabled = "Yes"
             ignoreCount = "0"
             continueAfterRunningActions = "No"
-            filePath = "KulexiuForStudent/Common/Base/KSRCIMDataSource.m"
+            filePath = "KulexiuForStudent/Module/CloudEngine/MidiPlayer/MidiPlayerEngine.m"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "115"
-            endingLineNumber = "115"
-            landmarkName = "-getUserInfoWithUserId:inGroup:completion:"
+            startingLineNumber = "509"
+            endingLineNumber = "509"
+            landmarkName = "-iterate:TrackIndex:"
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>

+ 22 - 0
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Chat/group_owner.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "group_owner@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "group_owner@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Chat/group_owner.imageset/group_owner@2x.png


BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Chat/group_owner.imageset/group_owner@3x.png


+ 22 - 0
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Chat/group_ownerList.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "group_ownerList@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "group_ownerList@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Chat/group_ownerList.imageset/group_ownerList@2x.png


BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Chat/group_ownerList.imageset/group_ownerList@3x.png


+ 9 - 9
KulexiuForStudent/KulexiuForStudent/Common/Base/KSAccompanyWebViewController.m

@@ -604,15 +604,15 @@
                          ]
                      }
                  */
-//                NSDictionary *content = [parm dictionaryValueForKey:@"content"];
-//                for (NSDictionary *dic in [content arrayValueForKey:@"parts"]) {
-//                   NSInteger trackId = [self.playerEngine getSingleTrackNumByName:[dic stringValueForKey:@"name"]];
-//                    if (trackId >= 0) {
-//                        float volume = [dic floatValueForKey:@"volume"];
-//
-//                        [self.playerEngine volume:volume/100 WithTrack:(UInt32)trackId];
-//                    }
-//                }
+                NSDictionary *content = [parm dictionaryValueForKey:@"content"];
+                for (NSDictionary *dic in [content arrayValueForKey:@"parts"]) {
+                   NSInteger trackId = [self.playerEngine getSingleTrackNumByName:[dic stringValueForKey:@"name"]];
+                    if (trackId >= 0) {
+                        float volume = [dic floatValueForKey:@"volume"];
+
+                        [self.playerEngine volume:volume/100 WithTrack:(UInt32)trackId];
+                    }
+                }
                 [self postMessage:parm];
                 [self.playerEngine getAllTrackVolume];
             }

+ 4 - 2
KulexiuForStudent/KulexiuForStudent/Common/Base/KSRCIMDataSource.m

@@ -113,8 +113,10 @@
         if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
             NSDictionary *result = [dic dictionaryValueForKey:@"data"];
             NSString *name = [result stringValueForKey:@"nickname"];
-            NSDictionary *userDic = [result dictionaryValueForKey:@"user"];
-            RCUserInfo *user = [[RCUserInfo alloc] initWithUserId:userId name:name portrait:[userDic stringValueForKey:@"avatar"]];
+            RCUserInfo *user = [[RCUserInfo alloc] initWithUserId:userId name:name portrait:[result stringValueForKey:@"avatar"]];
+            if ([result boolValueForKey:@"isAdmin"]) {
+                user.extra = @"owner";
+            }
             completion(user);
         }
         else {

+ 14 - 14
KulexiuForStudent/KulexiuForStudent/Common/Define/PrefixHeader.pch

@@ -117,24 +117,24 @@ shouldPrevent = NO; \
 
 //#ifdef DEBUG
 
-//#define hostURL (@"https://dev.colexiu.com")
-//#define SEALCLASSHOST (@"https://dev.colexiu.com/api-classroom")
-//#define WEBHOST (@"https://dev.colexiu.com/student")
-//#define SOCKET_URL (@"wss://dev.colexiu.com/audioAnalysis")
-//#define JSPUSH_ENVIRONMENT (NO)
-//#define RCIM_KEY (@"0vnjpoad0jbdz")
-//#define SUBMIT_UUID (YES)
+#define hostURL (@"https://dev.colexiu.com")
+#define SEALCLASSHOST (@"https://dev.colexiu.com/api-classroom")
+#define WEBHOST (@"https://dev.colexiu.com/student")
+#define SOCKET_URL (@"wss://dev.colexiu.com/audioAnalysis")
+#define JSPUSH_ENVIRONMENT (NO)
+#define RCIM_KEY (@"0vnjpoad0jbdz")
+#define SUBMIT_UUID (YES)
 
 
 //#else
 
-#define hostURL (@"https://online.colexiu.com")
-#define SEALCLASSHOST (@"https://online.colexiu.com/api-classroom")
-#define WEBHOST (@"https://online.colexiu.com/student")
-#define SOCKET_URL (@"wss://online.colexiu.com/audioAnalysis")
-#define JSPUSH_ENVIRONMENT (YES)
-#define RCIM_KEY (@"e5t4ouvpe42pa")
-#define SUBMIT_UUID (YES)
+//#define hostURL (@"https://online.colexiu.com")
+//#define SEALCLASSHOST (@"https://online.colexiu.com/api-classroom")
+//#define WEBHOST (@"https://online.colexiu.com/student")
+//#define SOCKET_URL (@"wss://online.colexiu.com/audioAnalysis")
+//#define JSPUSH_ENVIRONMENT (YES)
+//#define RCIM_KEY (@"e5t4ouvpe42pa")
+//#define SUBMIT_UUID (YES)
 
 
 //#endif

+ 28 - 1
KulexiuForStudent/KulexiuForStudent/Module/Chat/Controller/KSChatConversationViewController.m

@@ -27,6 +27,7 @@
 #import "KSAccompanyWebViewController.h"
 
 #import "KSPublicAlertView.h"
+#import "KSGroupTagImageView.h"
 
 @interface RCNaviDataInfo : NSObject
 
@@ -100,7 +101,6 @@
     [self leftRightButton];
     [self refreshUserInfoOrGroupInfo];
     self.isFirstLoad = YES;
-//    [self.chatSessionInputBarControl.pluginBoardView removeItemAtIndex:2];
 }
 
 - (void)viewWillAppear:(BOOL)animated {
@@ -340,12 +340,16 @@
                     GroupMemberModel *model = [[GroupMemberModel alloc] initWithDictionary:parm];
                     // 刷新缓存
                     RCUserInfo *user = [[RCUserInfo alloc] initWithUserId:model.userId name:model.nickname portrait:model.avatar];
+                    if (model.isAdmin) {
+                        user.extra = @"owner";
+                    }
                     [[RCIM sharedRCIM] refreshGroupUserInfoCache:user withUserId:model.userId withGroupId:self.targetId];
                 }
             }
             else {
                 
             }
+            
         } faliure:^(NSError * _Nonnull error) {
             
         }];
@@ -419,6 +423,29 @@
         UIImageView *imageView = (UIImageView *)((RCMessageCell *)cell).portraitImageView;
         imageView.contentMode = UIViewContentModeScaleAspectFill;
         imageView.layer.masksToBounds = YES;
+        
+        if (self.conversationType == ConversationType_GROUP) {
+            UIView *contentView = (UIView *)((RCMessageCell *)cell).messageContentView;
+            RCMessageModel *model = self.conversationDataRepository[indexPath.row];
+            for (UIView *subView in contentView.subviews) {
+                if ([subView isKindOfClass:[KSGroupTagImageView class]]) {
+                    [subView removeFromSuperview];
+                    break;
+                }
+            }
+            RCUserInfo *user = [[RCIM sharedRCIM] getGroupUserInfoCache:model.senderUserId withGroupId:self.targetId];
+            if ([user.extra isEqualToString:@"owner"]) {
+                KSGroupTagImageView *avatarImage = [[KSGroupTagImageView alloc] initWithImage:[UIImage imageNamed:@"group_owner"]];
+                [contentView addSubview:avatarImage];
+                [avatarImage mas_makeConstraints:^(MASConstraintMaker *make) {
+                    make.width.mas_equalTo(36);
+                    make.height.mas_equalTo(16);
+                    make.centerX.mas_equalTo(imageView.mas_centerX);
+                    make.centerY.mas_equalTo(imageView.mas_bottom);
+                }];
+            }
+        }
+        
     }
 }
 

+ 3 - 0
KulexiuForStudent/KulexiuForStudent/Module/Chat/Group/Controller/GroupMemberViewController.m

@@ -56,6 +56,9 @@
                 
                 // 刷新缓存
                 RCUserInfo *user = [[RCUserInfo alloc] initWithUserId:model.userId name:model.nickname portrait:model.avatar];
+                if (model.isAdmin) {
+                    user.extra = @"owner";
+                }
                 [[RCIM sharedRCIM] refreshGroupUserInfoCache:user withUserId:model.userId withGroupId:self.groupId];
             }
             [self evaluateMessge];

+ 3 - 0
KulexiuForStudent/KulexiuForStudent/Module/Chat/Group/Controller/GroupSettingViewController.m

@@ -99,6 +99,9 @@
                 
                 // 刷新缓存
                 RCUserInfo *user = [[RCUserInfo alloc] initWithUserId:model.userId name:model.nickname portrait:model.avatar];
+                if (model.isAdmin) {
+                    user.extra = @"owner";
+                }
                 [[RCIM sharedRCIM] refreshGroupUserInfoCache:user withUserId:model.userId withGroupId:self.groupId];
             }
             [self evaluateMessge];

+ 14 - 0
KulexiuForStudent/KulexiuForStudent/Module/Chat/Group/View/GroupMemberListCell.m

@@ -10,6 +10,10 @@
 
 @interface GroupMemberListCell ()
 
+@property (weak, nonatomic) IBOutlet UIImageView *ownerImage;
+@property (weak, nonatomic) IBOutlet NSLayoutConstraint *ownerWidth;
+@property (weak, nonatomic) IBOutlet NSLayoutConstraint *nameLeft;
+
 @property (weak, nonatomic) IBOutlet UIImageView *memberLogo;
 
 @property (weak, nonatomic) IBOutlet UILabel *memberName;
@@ -51,6 +55,16 @@
             self.chatButton.hidden = YES;
             self.chatButton.userInteractionEnabled = NO;
         }
+        if (model.isAdmin) {
+            self.nameLeft.constant = 4.0f;
+            self.ownerWidth.constant = 34.0f;
+            self.ownerImage.hidden = NO;
+        }
+        else {
+            self.nameLeft.constant = 0.0f;
+            self.ownerWidth.constant = 0.0f;
+            self.ownerImage.hidden = YES;
+        }
     }
 }
 - (IBAction)chatAction:(id)sender {

+ 17 - 4
KulexiuForStudent/KulexiuForStudent/Module/Chat/Group/View/GroupMemberListCell.xib

@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="19529" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
     <device id="retina6_1" orientation="portrait" appearance="light"/>
     <dependencies>
         <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="19519"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
         <capability name="Safe area layout guides" minToolsVersion="9.0"/>
         <capability name="System colors in document resources" minToolsVersion="11.0"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
@@ -34,7 +34,7 @@
                                 </userDefinedRuntimeAttributes>
                             </imageView>
                             <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="张三" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Vhp-Wi-YsA">
-                                <rect key="frame" x="69" y="21" width="33" height="22"/>
+                                <rect key="frame" x="107" y="21" width="33" height="22"/>
                                 <constraints>
                                     <constraint firstAttribute="height" constant="22" id="Js9-hD-GW8"/>
                                 </constraints>
@@ -54,6 +54,13 @@
                                     <action selector="chatAction:" destination="KGk-i7-Jjw" eventType="touchUpInside" id="zCp-eY-UZG"/>
                                 </connections>
                             </button>
+                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="group_ownerList" translatesAutoresizingMaskIntoConstraints="NO" id="qqr-xe-xWm">
+                                <rect key="frame" x="69" y="23" width="34" height="18"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" constant="34" id="d6B-m0-bcK"/>
+                                    <constraint firstAttribute="height" constant="18" id="yGQ-mL-173"/>
+                                </constraints>
+                            </imageView>
                         </subviews>
                         <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                         <constraints>
@@ -62,8 +69,10 @@
                             <constraint firstItem="GW3-Oz-aPr" firstAttribute="centerY" secondItem="3bd-Vo-rTM" secondAttribute="centerY" id="Mw8-KH-Nlc"/>
                             <constraint firstAttribute="trailing" secondItem="C2d-wO-ajH" secondAttribute="trailing" constant="14" id="a77-uB-Due"/>
                             <constraint firstItem="C2d-wO-ajH" firstAttribute="centerY" secondItem="Vhp-Wi-YsA" secondAttribute="centerY" id="cZb-Vp-Luy"/>
-                            <constraint firstItem="Vhp-Wi-YsA" firstAttribute="leading" secondItem="GW3-Oz-aPr" secondAttribute="trailing" constant="11" id="eYK-XD-v9I"/>
                             <constraint firstItem="GW3-Oz-aPr" firstAttribute="leading" secondItem="3bd-Vo-rTM" secondAttribute="leading" constant="14" id="g2u-Nh-Bgq"/>
+                            <constraint firstItem="Vhp-Wi-YsA" firstAttribute="leading" secondItem="qqr-xe-xWm" secondAttribute="trailing" constant="4" id="qXP-PU-oDm"/>
+                            <constraint firstItem="qqr-xe-xWm" firstAttribute="leading" secondItem="GW3-Oz-aPr" secondAttribute="trailing" constant="11" id="ufc-42-4db"/>
+                            <constraint firstItem="Vhp-Wi-YsA" firstAttribute="centerY" secondItem="qqr-xe-xWm" secondAttribute="centerY" id="wDN-FY-zqd"/>
                         </constraints>
                         <userDefinedRuntimeAttributes>
                             <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
@@ -85,12 +94,16 @@
                 <outlet property="chatButton" destination="C2d-wO-ajH" id="F2p-LE-BIc"/>
                 <outlet property="memberLogo" destination="GW3-Oz-aPr" id="sPh-qx-eoq"/>
                 <outlet property="memberName" destination="Vhp-Wi-YsA" id="5VD-Ix-Oua"/>
+                <outlet property="nameLeft" destination="qXP-PU-oDm" id="xZu-cz-adF"/>
+                <outlet property="ownerImage" destination="qqr-xe-xWm" id="1qi-YL-kwV"/>
+                <outlet property="ownerWidth" destination="d6B-m0-bcK" id="Yus-cM-ofV"/>
             </connections>
             <point key="canvasLocation" x="131.8840579710145" y="63.616071428571423"/>
         </tableViewCell>
     </objects>
     <resources>
         <image name="chat_chat" width="19" height="18"/>
+        <image name="group_ownerList" width="34" height="18"/>
         <systemColor name="systemBackgroundColor">
             <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
         </systemColor>

+ 16 - 0
KulexiuForStudent/KulexiuForStudent/Module/Chat/View/KSGroupTagImageView.h

@@ -0,0 +1,16 @@
+//
+//  KSGroupTagImageView.h
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/8/3.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface KSGroupTagImageView : UIImageView
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 20 - 0
KulexiuForStudent/KulexiuForStudent/Module/Chat/View/KSGroupTagImageView.m

@@ -0,0 +1,20 @@
+//
+//  KSGroupTagImageView.m
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/8/3.
+//
+
+#import "KSGroupTagImageView.h"
+
+@implementation KSGroupTagImageView
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end