Browse Source

群详情->群简介

Steven 5 months ago
parent
commit
097c714c02

+ 16 - 0
KulexiuForStudent/KulexiuForStudent.xcodeproj/project.pbxproj

@@ -925,6 +925,9 @@
 		BCC583D128A9EC6400BAB4CF /* cloud_animation_2.png in Resources */ = {isa = PBXBuildFile; fileRef = BCC583B228A9EC6400BAB4CF /* cloud_animation_2.png */; };
 		BCC583D228A9EC6400BAB4CF /* cloud_animation.json in Resources */ = {isa = PBXBuildFile; fileRef = BCC583B328A9EC6400BAB4CF /* cloud_animation.json */; };
 		BCC5841E28AA545B00BAB4CF /* cloud_animation_29.png in Resources */ = {isa = PBXBuildFile; fileRef = BCC5841D28AA545B00BAB4CF /* cloud_animation_29.png */; };
+		BCC622F82D228A0A005F0190 /* GroupIntroduceViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BCC622F72D228A0A005F0190 /* GroupIntroduceViewController.m */; };
+		BCC622FC2D228A7C005F0190 /* GroupIntroduceBodyView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCC622FA2D228A7C005F0190 /* GroupIntroduceBodyView.m */; };
+		BCC622FD2D228A7C005F0190 /* GroupIntroduceBodyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCC622FB2D228A7C005F0190 /* GroupIntroduceBodyView.xib */; };
 		BCC9A7B62C955CB500F5D005 /* KSPlatformDownloadAlert.m in Sources */ = {isa = PBXBuildFile; fileRef = BCC9A7B52C955CB500F5D005 /* KSPlatformDownloadAlert.m */; };
 		BCC9A7B82C955CBB00F5D005 /* KSPlatformDownloadAlert.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCC9A7B72C955CBB00F5D005 /* KSPlatformDownloadAlert.xib */; };
 		BCCC361A2AAF0D77000D60CA /* INSSettingBodyView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCCC36192AAF0D77000D60CA /* INSSettingBodyView.m */; };
@@ -2573,6 +2576,11 @@
 		BCC583B228A9EC6400BAB4CF /* cloud_animation_2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = cloud_animation_2.png; sourceTree = "<group>"; };
 		BCC583B328A9EC6400BAB4CF /* cloud_animation.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = cloud_animation.json; sourceTree = "<group>"; };
 		BCC5841D28AA545B00BAB4CF /* cloud_animation_29.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = cloud_animation_29.png; sourceTree = "<group>"; };
+		BCC622F62D228A0A005F0190 /* GroupIntroduceViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GroupIntroduceViewController.h; sourceTree = "<group>"; };
+		BCC622F72D228A0A005F0190 /* GroupIntroduceViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GroupIntroduceViewController.m; sourceTree = "<group>"; };
+		BCC622F92D228A7C005F0190 /* GroupIntroduceBodyView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GroupIntroduceBodyView.h; sourceTree = "<group>"; };
+		BCC622FA2D228A7C005F0190 /* GroupIntroduceBodyView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GroupIntroduceBodyView.m; sourceTree = "<group>"; };
+		BCC622FB2D228A7C005F0190 /* GroupIntroduceBodyView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = GroupIntroduceBodyView.xib; sourceTree = "<group>"; };
 		BCC9A7B42C955CB500F5D005 /* KSPlatformDownloadAlert.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KSPlatformDownloadAlert.h; sourceTree = "<group>"; };
 		BCC9A7B52C955CB500F5D005 /* KSPlatformDownloadAlert.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KSPlatformDownloadAlert.m; sourceTree = "<group>"; };
 		BCC9A7B72C955CBB00F5D005 /* KSPlatformDownloadAlert.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KSPlatformDownloadAlert.xib; sourceTree = "<group>"; };
@@ -2939,6 +2947,8 @@
 				2723B5FC27F157D500E0B90B /* GroupSettingViewController.m */,
 				2723B5FE27F157D500E0B90B /* KSChatComplainController.h */,
 				2723B5F927F157D500E0B90B /* KSChatComplainController.m */,
+				BCC622F62D228A0A005F0190 /* GroupIntroduceViewController.h */,
+				BCC622F72D228A0A005F0190 /* GroupIntroduceViewController.m */,
 			);
 			path = Controller;
 			sourceTree = "<group>";
@@ -2979,6 +2989,9 @@
 				2723B61527F157D500E0B90B /* GroupSettingBodyView.h */,
 				2723B60B27F157D500E0B90B /* GroupSettingBodyView.m */,
 				2723B60C27F157D500E0B90B /* GroupSettingBodyView.xib */,
+				BCC622F92D228A7C005F0190 /* GroupIntroduceBodyView.h */,
+				BCC622FA2D228A7C005F0190 /* GroupIntroduceBodyView.m */,
+				BCC622FB2D228A7C005F0190 /* GroupIntroduceBodyView.xib */,
 				BCB5B3072ABC1341005BF25D /* KSImageDisplayView.h */,
 				BCB5B3082ABC1341005BF25D /* KSImageDisplayView.m */,
 				BCB5B30A2ABC1347005BF25D /* KSImageDisplayView.xib */,
@@ -6860,6 +6873,7 @@
 				2723B63227F157D500E0B90B /* GroupSettingBodyView.xib in Resources */,
 				BCA0CB3D2D1A61B600488F8E /* GroupCourseGroupHeadView.xib in Resources */,
 				BCA0CB3E2D1A61B600488F8E /* GroupCourseGroupNavView.xib in Resources */,
+				BCC622FD2D228A7C005F0190 /* GroupIntroduceBodyView.xib in Resources */,
 				BCA0CB3F2D1A61B600488F8E /* GroupCourseListCell.xib in Resources */,
 				BC5A4B6A2CF40C35008C2FDD /* CourseGroupPlanDescView.xib in Resources */,
 				BC5A4B6C2CF40C35008C2FDD /* CourseGroupNavView.xib in Resources */,
@@ -7621,6 +7635,7 @@
 				BCC0F60C2A8CD86C00C4EFA4 /* TXNodePlayMessage.m in Sources */,
 				2723B63C27F159BA00E0B90B /* KSBaseTableViewController.m in Sources */,
 				BCB9FA2B286D79A4005D766B /* ScanNavView.m in Sources */,
+				BCC622FC2D228A7C005F0190 /* GroupIntroduceBodyView.m in Sources */,
 				BC27A079280FFA2200F91E27 /* EvaluateDetailModel.m in Sources */,
 				27F9033127E87C2E00C08A19 /* DeviceCheckView.m in Sources */,
 				BC119263280FA90100A716F7 /* HomeworkDetailModel.m in Sources */,
@@ -7794,6 +7809,7 @@
 				BC9852832BCCC821008F0435 /* AlbumSwitchCell.m in Sources */,
 				BCC0F6AA2A8CDD4000C4EFA4 /* RolePortraitView.m in Sources */,
 				BCC0F6682A8CD8F500C4EFA4 /* KSDanInputBarControl.m in Sources */,
+				BCC622F82D228A0A005F0190 /* GroupIntroduceViewController.m in Sources */,
 				BC106C3E2A9338F6000759A9 /* TXLiveForceKickMsg.m in Sources */,
 				BC12639528FF8D2300509E90 /* HomeMusicModel.m in Sources */,
 				BCFDA62428BC94400022B497 /* HomeNavSearchView.m in Sources */,

+ 1 - 1
KulexiuForStudent/KulexiuForStudent.xcodeproj/xcshareddata/xcschemes/KulexiuForStudent.xcscheme

@@ -51,7 +51,7 @@
       </Testables>
    </TestAction>
    <LaunchAction
-      buildConfiguration = "TEST"
+      buildConfiguration = "DEV"
       selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
       selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
       launchStyle = "0"

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

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

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


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


+ 22 - 0
KulexiuForStudent/KulexiuForStudent/Module/Chat/Group/Controller/GroupIntroduceViewController.h

@@ -0,0 +1,22 @@
+//
+//  GroupIntroduceViewController.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2024/12/30.
+//
+
+#import "KSBaseViewController.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface GroupIntroduceViewController : KSBaseViewController
+
+@property (nonatomic, strong) NSString *groupId;
+
+@property (nonatomic, strong) NSString *groupIntroduce;
+
+@property (nonatomic, assign) BOOL canModify;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 60 - 0
KulexiuForStudent/KulexiuForStudent/Module/Chat/Group/Controller/GroupIntroduceViewController.m

@@ -0,0 +1,60 @@
+//
+//  GroupIntroduceViewController.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2024/12/30.
+//
+
+#import "GroupIntroduceViewController.h"
+#import "GroupIntroduceBodyView.h"
+
+@interface GroupIntroduceViewController ()
+
+@property (nonatomic, strong) GroupIntroduceBodyView *bodyView;
+
+@end
+
+@implementation GroupIntroduceViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+    [self allocTitle:@"群简介"];
+    [self configUI];
+}
+
+- (void)configUI {
+    [self.scrollView removeFromSuperview];
+    [self.view addSubview:self.bodyView];
+    [self.bodyView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.top.bottom.mas_equalTo(self.view);
+    }];
+    MJWeakSelf;
+    [self.bodyView configWithDesc:self.groupIntroduce callback:^(NSString * _Nonnull introduceString) {
+        [weakSelf updateIntroduce:introduceString];
+    }];
+}
+
+- (void)updateIntroduce:(NSString *)introduce {
+    
+}
+
+- (GroupIntroduceBodyView *)bodyView {
+    if (!_bodyView) {
+        _bodyView = [GroupIntroduceBodyView sharedInstance];
+        _bodyView.canModify = self.canModify;
+    }
+    return _bodyView;
+}
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end

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

@@ -18,6 +18,7 @@
 #import <ImSDK_Plus/V2TIMManager+Group.h>
 #import "CustomNavViewController.h"
 #import "GroupQuitAlert.h"
+#import "GroupIntroduceViewController.h"
 
 @interface GroupSettingViewController ()
 
@@ -215,6 +216,19 @@
 //            [self backAction];
         }
             break;
+        case GROUPSETTING_GOURPINTRO:
+        {
+            if ([NSString isEmptyString:self.sourceModel.introduce]) {
+                [LOADING_MANAGER MBShowAUTOHidingInWindow:@"暂无群介绍"];
+                return;
+            }
+            GroupIntroduceViewController *ctrl = [[GroupIntroduceViewController alloc] init];
+            ctrl.groupId = self.groupId;
+            ctrl.groupIntroduce = self.sourceModel.introduce;
+            ctrl.canModify = NO;
+            [self.navigationController pushViewController:ctrl animated:YES];
+        }
+            break;
         default:
             break;
     }

+ 24 - 0
KulexiuForStudent/KulexiuForStudent/Module/Chat/Group/View/GroupIntroduceBodyView.h

@@ -0,0 +1,24 @@
+//
+//  GroupIntroduceBodyView.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2024/12/30.
+//
+
+#import <UIKit/UIKit.h>
+
+typedef void(^GroupIntroduceModifyCallback)(NSString * _Nonnull introduceString);
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface GroupIntroduceBodyView : UIView
+
+@property (nonatomic, assign) BOOL canModify;
+
++ (instancetype)sharedInstance;
+
+- (void)configWithDesc:(NSString *)introduceString callback:(GroupIntroduceModifyCallback)callback;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 180 - 0
KulexiuForStudent/KulexiuForStudent/Module/Chat/Group/View/GroupIntroduceBodyView.m

@@ -0,0 +1,180 @@
+//
+//  GroupIntroduceBodyView.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2024/12/30.
+//
+
+#import "GroupIntroduceBodyView.h"
+
+@interface GroupIntroduceBodyView ()<UITextViewDelegate>
+
+@property (weak, nonatomic) IBOutlet UILabel *tipsLabel;
+
+@property (weak, nonatomic) IBOutlet UILabel *countLabel;
+
+@property (weak, nonatomic) IBOutlet UITextView *inputView;
+
+@property (nonatomic, copy) GroupIntroduceModifyCallback callback;
+
+@property (nonatomic, assign) NSInteger maxInputCount;
+
+@property (weak, nonatomic) IBOutlet UIButton *bottomButton;
+
+@end
+
+@implementation GroupIntroduceBodyView
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    self.inputView.delegate = self;
+    self.inputView.textContainer.lineFragmentPadding = 0;
+    self.inputView.textContainerInset = UIEdgeInsetsZero;
+    [self configDefault];
+}
+
+- (void)configDefault {
+    self.maxInputCount = 200;
+}
+
++ (instancetype)sharedInstance {
+    GroupIntroduceBodyView *view = [[[NSBundle mainBundle] loadNibNamed:@"GroupIntroduceBodyView" owner:nil options:nil] firstObject];
+    return view;
+}
+
+- (void)configWithDesc:(NSString *)introduceString callback:(GroupIntroduceModifyCallback)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+    self.countLabel.text = [NSString stringWithFormat:@"%zd/200", introduceString.length];
+    self.tipsLabel.hidden = [NSString isEmptyString:introduceString] ? NO : YES;
+    
+    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc]init];
+    paragraphStyle.lineSpacing = 4.0f;
+    UIFont *font = [UIFont systemFontOfSize:16 weight:UIFontWeightRegular];
+    if (![NSString isEmptyString:introduceString]) {
+        NSDictionary *attributes = @{NSFontAttributeName:font,NSParagraphStyleAttributeName:paragraphStyle,NSForegroundColorAttributeName:HexRGB(0x333333)};
+        self.inputView.attributedText = [[NSAttributedString alloc] initWithString:introduceString attributes:attributes];
+    }
+}
+
+- (IBAction)saveAction:(id)sender {
+    [self endEditing:YES];
+    if (self.callback) {
+        if ([NSString isEmptyString:self.inputView.text]) {
+            [LOADING_MANAGER MBShowAUTOHidingInWindow:self.tipsLabel.text];
+            return;
+        }
+        self.callback(self.inputView.text);
+    }
+}
+
+#pragma mark   ---- delegate
+
+- (void)textViewDidBeginEditing:(UITextView *)textView {
+    self.tipsLabel.hidden = YES;
+}
+
+
+- (void)textViewDidEndEditing:(UITextView *)textView {
+    if ([NSString isEmptyString:textView.text]) {
+        self.tipsLabel.hidden = NO;
+    }
+}
+
+- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
+    UITextRange *markedTextRange = textView.markedTextRange;
+    if (markedTextRange) {
+        // 当前处于拼音输入状态,暂不更新 attributedText
+        return YES;
+    }
+    NSInteger limitCount = self.maxInputCount;
+
+    NSString *newText = [[textView text] stringByReplacingCharactersInRange:range withString:text];
+    if (newText.length > limitCount) {
+        newText = [newText substringWithRange:NSMakeRange(0, limitCount)];
+        textView.text = newText;
+    }
+    return YES;
+}
+
+- (void)updateTextViewLineHeight:(UITextView *)textView {
+    UITextRange *markedTextRange = textView.markedTextRange;
+    if (markedTextRange) {
+        // 当前处于拼音输入状态,暂不更新 attributedText
+        return;
+    }
+    [UIView setAnimationsEnabled:NO];
+    NSRange selectedRange = textView.selectedRange;
+    NSMutableAttributedString *attrs = [[NSMutableAttributedString alloc] initWithString:textView.text attributes:[self getTypeAttributes]];
+    textView.attributedText = attrs;
+    textView.selectedRange = selectedRange;
+    [UIView setAnimationsEnabled:YES];
+}
+
+- (void)textViewDidChange:(UITextView *)textView {
+    // 获取当前高亮的部分(如果正在拼音输入状态)
+    UITextRange *selectedRange = [textView markedTextRange];
+    UITextPosition *position = [textView positionFromPosition:selectedRange.start offset:0];
+    
+    // 如果没有高亮选择的文本,说明不是拼音输入状态
+    if (!position) {
+        // 获取当前textView的内容
+        NSInteger limitCount = self.maxInputCount;
+        NSString *currentText = textView.text;
+        
+        // 如果文本超出最大长度,进行截取
+        if (currentText.length > limitCount) {
+            NSString *limitedText = [currentText substringToIndex:limitCount];
+            textView.text = limitedText;
+        }
+        
+        self.countLabel.text = [NSString stringWithFormat:@"%zd/%zd",textView.text.length,self.maxInputCount];
+    }
+    [self updateTextViewLineHeight:textView];
+}
+
+- (BOOL)textViewShouldEndEditing:(UITextView *)textView {
+    [self endEditing:YES];
+    return YES;
+}
+
+- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
+    [self endEditing:YES];
+}
+
+- (NSDictionary *)getTypeAttributes {
+    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc]init];
+    paragraphStyle.lineSpacing = 4.0f;
+    UIFont *font = [UIFont systemFontOfSize:16 weight:UIFontWeightRegular];
+    
+    NSDictionary *attributes = @{NSFontAttributeName:font,NSParagraphStyleAttributeName:paragraphStyle,NSForegroundColorAttributeName:HexRGB(0x333333)};
+    return attributes;
+}
+
+- (void)setCanModify:(BOOL)canModify {
+    _canModify = canModify;
+    if (canModify) {
+        self.inputView.editable = YES;
+        self.inputView.selectable = YES;
+        self.countLabel.hidden = NO;
+        self.bottomButton.hidden = NO;
+        self.bottomButton.userInteractionEnabled = YES;
+    }
+    else {
+        self.inputView.editable = NO;
+        self.inputView.selectable = NO;
+        self.countLabel.hidden = YES;
+        self.bottomButton.hidden = YES;
+        self.bottomButton.userInteractionEnabled = NO;
+    }
+}
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 127 - 0
KulexiuForStudent/KulexiuForStudent/Module/Chat/Group/View/GroupIntroduceBodyView.xib

@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23504" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_12" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23506"/>
+        <capability name="System colors in document resources" minToolsVersion="11.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="GroupIntroduceBodyView">
+            <rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <subviews>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="6Wf-NZ-RlI">
+                    <rect key="frame" x="14" y="12" width="365" height="296"/>
+                    <subviews>
+                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="group_introduce" translatesAutoresizingMaskIntoConstraints="NO" id="l4Y-wY-IEl">
+                            <rect key="frame" x="11" y="12" width="24" height="24"/>
+                        </imageView>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="群简介" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="00i-pd-fVW">
+                            <rect key="frame" x="38" y="12" width="50.666666666666657" height="24"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="24" id="3pX-8E-oJi"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" textAlignment="natural" translatesAutoresizingMaskIntoConstraints="NO" id="ojd-Ye-Vwu">
+                            <rect key="frame" x="12" y="45" width="341" height="239"/>
+                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                            <color key="textColor" systemColor="labelColor"/>
+                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                            <textInputTraits key="textInputTraits" autocapitalizationType="sentences" smartInsertDeleteType="no"/>
+                        </textView>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="请输入群简介" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="eX5-gT-ext">
+                            <rect key="frame" x="12" y="44" width="95.333333333333329" height="22"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="22" id="BLH-Gt-f9F"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                            <color key="textColor" red="0.75686274509803919" green="0.75686274509803919" blue="0.75686274509803919" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0/200" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Rjf-ib-50h">
+                            <rect key="frame" x="314.33333333333331" y="12" width="38.666666666666686" height="22"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="22" id="Noz-AX-6hw"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.29999999999999999" colorSpace="custom" customColorSpace="sRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                    </subviews>
+                    <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <constraints>
+                        <constraint firstItem="00i-pd-fVW" firstAttribute="leading" secondItem="l4Y-wY-IEl" secondAttribute="trailing" constant="3" id="3ph-YE-NzZ"/>
+                        <constraint firstItem="ojd-Ye-Vwu" firstAttribute="top" secondItem="l4Y-wY-IEl" secondAttribute="bottom" constant="9" id="4vj-gA-Ure"/>
+                        <constraint firstItem="l4Y-wY-IEl" firstAttribute="leading" secondItem="6Wf-NZ-RlI" secondAttribute="leading" constant="11" id="7V7-IT-uqm"/>
+                        <constraint firstAttribute="height" constant="296" id="82l-ei-nCJ"/>
+                        <constraint firstAttribute="trailing" secondItem="ojd-Ye-Vwu" secondAttribute="trailing" constant="12" id="BLP-4W-nDO"/>
+                        <constraint firstAttribute="trailing" secondItem="Rjf-ib-50h" secondAttribute="trailing" constant="12" id="BcM-MP-oJu"/>
+                        <constraint firstItem="eX5-gT-ext" firstAttribute="leading" secondItem="6Wf-NZ-RlI" secondAttribute="leading" constant="12" id="IhJ-pg-fSz"/>
+                        <constraint firstItem="eX5-gT-ext" firstAttribute="top" secondItem="l4Y-wY-IEl" secondAttribute="bottom" constant="8" id="QiB-Pr-4I5"/>
+                        <constraint firstItem="00i-pd-fVW" firstAttribute="top" secondItem="6Wf-NZ-RlI" secondAttribute="top" constant="12" id="Rsc-jc-KdL"/>
+                        <constraint firstItem="ojd-Ye-Vwu" firstAttribute="leading" secondItem="6Wf-NZ-RlI" secondAttribute="leading" constant="12" id="UME-c2-72N"/>
+                        <constraint firstAttribute="bottom" secondItem="ojd-Ye-Vwu" secondAttribute="bottom" constant="12" id="cdd-Zt-61K"/>
+                        <constraint firstItem="Rjf-ib-50h" firstAttribute="top" secondItem="6Wf-NZ-RlI" secondAttribute="top" constant="12" id="eFF-Or-OsZ"/>
+                        <constraint firstItem="00i-pd-fVW" firstAttribute="centerY" secondItem="l4Y-wY-IEl" secondAttribute="centerY" id="yi3-dX-Lwd"/>
+                    </constraints>
+                    <userDefinedRuntimeAttributes>
+                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                            <real key="value" value="10"/>
+                        </userDefinedRuntimeAttribute>
+                    </userDefinedRuntimeAttributes>
+                </view>
+                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="C0w-dR-pBm">
+                    <rect key="frame" x="28" y="778" width="337" height="44"/>
+                    <color key="backgroundColor" red="0.1764705882" green="0.78039215689999997" blue="0.66666666669999997" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="44" id="5jv-sv-lKD"/>
+                    </constraints>
+                    <state key="normal" title="保存"/>
+                    <userDefinedRuntimeAttributes>
+                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                            <real key="value" value="22"/>
+                        </userDefinedRuntimeAttribute>
+                    </userDefinedRuntimeAttributes>
+                    <connections>
+                        <action selector="saveAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="SfW-vq-1Bz"/>
+                    </connections>
+                </button>
+            </subviews>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <constraints>
+                <constraint firstItem="C0w-dR-pBm" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="28" id="1oa-4g-zqK"/>
+                <constraint firstAttribute="trailing" secondItem="6Wf-NZ-RlI" secondAttribute="trailing" constant="14" id="XuS-lA-1RW"/>
+                <constraint firstAttribute="bottom" secondItem="C0w-dR-pBm" secondAttribute="bottom" constant="30" id="Z9k-V6-6qZ"/>
+                <constraint firstAttribute="trailing" secondItem="C0w-dR-pBm" secondAttribute="trailing" constant="28" id="Zci-Tb-W7R"/>
+                <constraint firstItem="6Wf-NZ-RlI" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="14" id="a4L-PN-NXM"/>
+                <constraint firstItem="6Wf-NZ-RlI" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="12" id="qEn-Se-ObV"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="bottomButton" destination="C0w-dR-pBm" id="cjE-AE-nOE"/>
+                <outlet property="countLabel" destination="Rjf-ib-50h" id="ZsS-CC-wDP"/>
+                <outlet property="inputView" destination="ojd-Ye-Vwu" id="9KT-FR-eXz"/>
+                <outlet property="tipsLabel" destination="eX5-gT-ext" id="IAg-Sd-72T"/>
+            </connections>
+            <point key="canvasLocation" x="34" y="20"/>
+        </view>
+    </objects>
+    <resources>
+        <image name="group_introduce" width="24" height="24"/>
+        <systemColor name="labelColor">
+            <color white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+        </systemColor>
+        <systemColor name="systemBackgroundColor">
+            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+        </systemColor>
+    </resources>
+</document>

+ 1 - 0
KulexiuForStudent/KulexiuForStudent/Module/Chat/Group/View/GroupSettingBodyView.h

@@ -16,6 +16,7 @@ typedef NS_ENUM(NSInteger, GROUPSETTING) {
     GROUPSETTING_NOTICE,  // 群公告
     GROUPSETTING_FEEDBACK, // 反馈
     GROUPSETTING_DISMISS, // 解散群聊
+    GROUPSETTING_GOURPINTRO, // 群介绍
 };
 
 

+ 11 - 0
KulexiuForStudent/KulexiuForStudent/Module/Chat/Group/View/GroupSettingBodyView.m

@@ -121,6 +121,8 @@ typedef void(^ChooseMemberCallback)(NSString *targetId);
 
 @property (nonatomic, strong) UIScrollView *memberScrollView;
 
+@property (weak, nonatomic) IBOutlet UILabel *groupDesc;
+
 @end
 
 @implementation GroupSettingBodyView
@@ -166,6 +168,8 @@ typedef void(^ChooseMemberCallback)(NSString *targetId);
             groupLimit = 2000;
         }
         self.groupMemberDesc.text = [NSString stringWithFormat:@"%.0f/%zd",model.memberNum,groupLimit];
+        
+        self.groupDesc.text = [NSString returnNoNullStringWithString:model.introduce];
     }
 }
 
@@ -271,6 +275,13 @@ typedef void(^ChooseMemberCallback)(NSString *targetId);
     }
 }
 
+// 群简介
+- (IBAction)groupIntroduce:(id)sender {
+    if (self.callback) {
+        self.callback(GROUPSETTING_GOURPINTRO);
+    }
+}
+
 - (void)setIsOn:(BOOL)isOn {
     _isOn = isOn;
     NSString *imageName = isOn ? CLIENT_SWITCH_ON : @"switch_off";

+ 98 - 38
KulexiuForStudent/KulexiuForStudent/Module/Chat/Group/View/GroupSettingBodyView.xib

@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23094" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23504" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
     <device id="retina6_1" orientation="portrait" appearance="light"/>
     <dependencies>
         <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23084"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23506"/>
         <capability name="System colors in document resources" minToolsVersion="11.0"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
@@ -64,7 +64,7 @@
                     <rect key="frame" x="0.0" y="112" width="414" height="140"/>
                     <subviews>
                         <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="查看联系人" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Ko0-ic-QhE">
-                            <rect key="frame" x="13" y="14" width="90" height="19.5"/>
+                            <rect key="frame" x="16" y="14" width="90" height="19.5"/>
                             <constraints>
                                 <constraint firstAttribute="width" constant="90" id="KWN-ah-XX8"/>
                             </constraints>
@@ -73,7 +73,7 @@
                             <nil key="highlightedColor"/>
                         </label>
                         <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="查看全部群成员" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="v6l-tz-OXe">
-                            <rect key="frame" x="289.5" y="14" width="97.5" height="20"/>
+                            <rect key="frame" x="285.5" y="14" width="97.5" height="20"/>
                             <constraints>
                                 <constraint firstAttribute="height" constant="20" id="0re-nB-uf4"/>
                             </constraints>
@@ -82,7 +82,7 @@
                             <nil key="highlightedColor"/>
                         </label>
                         <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="mine_next_grey" translatesAutoresizingMaskIntoConstraints="NO" id="Ef1-4F-E7a">
-                            <rect key="frame" x="397" y="17" width="7" height="14"/>
+                            <rect key="frame" x="395" y="17" width="7" height="14"/>
                             <constraints>
                                 <constraint firstAttribute="width" constant="7" id="LPs-ha-Fjo"/>
                                 <constraint firstAttribute="height" constant="14" id="dR4-cU-LG1"/>
@@ -102,25 +102,25 @@
                     <constraints>
                         <constraint firstItem="v6l-tz-OXe" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="Ko0-ic-QhE" secondAttribute="trailing" constant="15" id="0ov-cL-SgD"/>
                         <constraint firstItem="Ef1-4F-E7a" firstAttribute="centerY" secondItem="Ko0-ic-QhE" secondAttribute="centerY" id="6L2-1v-ewt"/>
-                        <constraint firstItem="Ko0-ic-QhE" firstAttribute="leading" secondItem="fRV-DB-sBs" secondAttribute="leading" constant="13" id="CJV-Ne-PQB"/>
+                        <constraint firstItem="Ko0-ic-QhE" firstAttribute="leading" secondItem="fRV-DB-sBs" secondAttribute="leading" constant="16" id="CJV-Ne-PQB"/>
                         <constraint firstAttribute="trailing" secondItem="HI1-5o-vEr" secondAttribute="trailing" id="GKt-iB-nKb"/>
-                        <constraint firstAttribute="trailing" secondItem="Ef1-4F-E7a" secondAttribute="trailing" constant="10" id="JQU-jz-a7d"/>
+                        <constraint firstAttribute="trailing" secondItem="Ef1-4F-E7a" secondAttribute="trailing" constant="12" id="JQU-jz-a7d"/>
                         <constraint firstAttribute="height" constant="140" id="TIV-BF-Okg"/>
                         <constraint firstItem="HI1-5o-vEr" firstAttribute="leading" secondItem="fRV-DB-sBs" secondAttribute="leading" id="WAH-j7-00w"/>
                         <constraint firstItem="Ef1-4F-E7a" firstAttribute="centerY" secondItem="v6l-tz-OXe" secondAttribute="centerY" id="oj4-oI-oLh"/>
                         <constraint firstAttribute="bottom" secondItem="HI1-5o-vEr" secondAttribute="bottom" id="s4z-Vn-yuR"/>
                         <constraint firstItem="Ko0-ic-QhE" firstAttribute="top" secondItem="fRV-DB-sBs" secondAttribute="top" constant="14" id="xog-98-TJN"/>
-                        <constraint firstItem="Ef1-4F-E7a" firstAttribute="leading" secondItem="v6l-tz-OXe" secondAttribute="trailing" constant="10" id="zdw-Q7-SoW"/>
+                        <constraint firstItem="Ef1-4F-E7a" firstAttribute="leading" secondItem="v6l-tz-OXe" secondAttribute="trailing" constant="12" id="zdw-Q7-SoW"/>
                     </constraints>
                     <connections>
                         <outletCollection property="gestureRecognizers" destination="hZ3-TO-Qmd" appends="YES" id="e9a-aC-88k"/>
                     </connections>
                 </view>
                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="UZO-j7-eJs">
-                    <rect key="frame" x="0.0" y="374" width="414" height="50"/>
+                    <rect key="frame" x="0.0" y="429" width="414" height="50"/>
                     <subviews>
                         <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="查找聊天内容" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="bcd-XL-l1B">
-                            <rect key="frame" x="13" y="15.5" width="145" height="19.5"/>
+                            <rect key="frame" x="16" y="15.5" width="145" height="19.5"/>
                             <constraints>
                                 <constraint firstAttribute="width" constant="145" id="ZNy-Jc-fkX"/>
                             </constraints>
@@ -129,14 +129,14 @@
                             <nil key="highlightedColor"/>
                         </label>
                         <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="mine_next_grey" translatesAutoresizingMaskIntoConstraints="NO" id="09i-zq-wwF">
-                            <rect key="frame" x="397" y="18" width="7" height="14"/>
+                            <rect key="frame" x="395" y="18" width="7" height="14"/>
                             <constraints>
                                 <constraint firstAttribute="width" constant="7" id="JUy-qJ-BB2"/>
                                 <constraint firstAttribute="height" constant="14" id="bLX-Xe-UN1"/>
                             </constraints>
                         </imageView>
                         <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ntG-Sr-YZn">
-                            <rect key="frame" x="387" y="25" width="0.0" height="0.0"/>
+                            <rect key="frame" x="383" y="25" width="0.0" height="0.0"/>
                             <fontDescription key="fontDescription" type="system" pointSize="17"/>
                             <color key="textColor" red="0.40000000000000002" green="0.40000000000000002" blue="0.40000000000000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                             <nil key="highlightedColor"/>
@@ -156,13 +156,13 @@
                         <constraint firstItem="7Fh-bv-cgE" firstAttribute="leading" secondItem="UZO-j7-eJs" secondAttribute="leading" constant="16" id="IKr-hz-1ro"/>
                         <constraint firstItem="7Fh-bv-cgE" firstAttribute="top" secondItem="UZO-j7-eJs" secondAttribute="top" id="MOh-cf-etV"/>
                         <constraint firstItem="09i-zq-wwF" firstAttribute="centerY" secondItem="UZO-j7-eJs" secondAttribute="centerY" id="OeQ-fN-6cK"/>
-                        <constraint firstItem="bcd-XL-l1B" firstAttribute="leading" secondItem="UZO-j7-eJs" secondAttribute="leading" constant="13" id="Rws-Er-90w"/>
+                        <constraint firstItem="bcd-XL-l1B" firstAttribute="leading" secondItem="UZO-j7-eJs" secondAttribute="leading" constant="16" id="Rws-Er-90w"/>
                         <constraint firstItem="09i-zq-wwF" firstAttribute="centerY" secondItem="ntG-Sr-YZn" secondAttribute="centerY" id="TxF-a3-Wxc"/>
                         <constraint firstAttribute="trailing" secondItem="7Fh-bv-cgE" secondAttribute="trailing" id="qym-aL-ovv"/>
                         <constraint firstAttribute="height" constant="50" id="s7y-Cv-X16"/>
-                        <constraint firstAttribute="trailing" secondItem="09i-zq-wwF" secondAttribute="trailing" constant="10" id="tRK-q4-3Nx"/>
+                        <constraint firstAttribute="trailing" secondItem="09i-zq-wwF" secondAttribute="trailing" constant="12" id="tRK-q4-3Nx"/>
                         <constraint firstItem="ntG-Sr-YZn" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="bcd-XL-l1B" secondAttribute="trailing" constant="10" id="wek-mK-cMq"/>
-                        <constraint firstItem="09i-zq-wwF" firstAttribute="leading" secondItem="ntG-Sr-YZn" secondAttribute="trailing" constant="10" id="xCS-nl-Zyy"/>
+                        <constraint firstItem="09i-zq-wwF" firstAttribute="leading" secondItem="ntG-Sr-YZn" secondAttribute="trailing" constant="12" id="xCS-nl-Zyy"/>
                     </constraints>
                     <connections>
                         <outletCollection property="gestureRecognizers" destination="Hae-L5-wXE" appends="YES" id="PNJ-YZ-BRs"/>
@@ -172,7 +172,7 @@
                     <rect key="frame" x="0.0" y="264" width="414" height="55"/>
                     <subviews>
                         <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="群名称" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="w4w-2R-YqH">
-                            <rect key="frame" x="13" y="18" width="75" height="19.5"/>
+                            <rect key="frame" x="16" y="18" width="75" height="19.5"/>
                             <constraints>
                                 <constraint firstAttribute="width" constant="75" id="kIg-GL-3Tq"/>
                             </constraints>
@@ -181,13 +181,13 @@
                             <nil key="highlightedColor"/>
                         </label>
                         <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Sg5-z3-lFr">
-                            <rect key="frame" x="387" y="27.5" width="0.0" height="0.0"/>
+                            <rect key="frame" x="383" y="27.5" width="0.0" height="0.0"/>
                             <fontDescription key="fontDescription" type="system" pointSize="16"/>
                             <color key="textColor" red="0.66666666666666663" green="0.66666666666666663" blue="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                             <nil key="highlightedColor"/>
                         </label>
                         <imageView hidden="YES" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="mine_next_grey" translatesAutoresizingMaskIntoConstraints="NO" id="dH8-35-u9Y">
-                            <rect key="frame" x="397" y="20.5" width="7" height="14"/>
+                            <rect key="frame" x="395" y="20.5" width="7" height="14"/>
                             <constraints>
                                 <constraint firstAttribute="width" constant="7" id="kGp-Em-Btf"/>
                                 <constraint firstAttribute="height" constant="14" id="vvc-DA-Efa"/>
@@ -199,22 +199,22 @@
                     <constraints>
                         <constraint firstItem="dH8-35-u9Y" firstAttribute="centerY" secondItem="hNX-kx-Qhp" secondAttribute="centerY" id="0dJ-eE-6L0"/>
                         <constraint firstItem="Sg5-z3-lFr" firstAttribute="centerY" secondItem="w4w-2R-YqH" secondAttribute="centerY" id="1ta-aB-eQs"/>
-                        <constraint firstItem="w4w-2R-YqH" firstAttribute="leading" secondItem="hNX-kx-Qhp" secondAttribute="leading" constant="13" id="A3g-5U-3fj"/>
+                        <constraint firstItem="w4w-2R-YqH" firstAttribute="leading" secondItem="hNX-kx-Qhp" secondAttribute="leading" constant="16" id="A3g-5U-3fj"/>
                         <constraint firstAttribute="height" constant="55" id="Emh-Yn-dgo"/>
                         <constraint firstItem="Sg5-z3-lFr" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="w4w-2R-YqH" secondAttribute="trailing" constant="10" id="RYT-Id-TVH"/>
-                        <constraint firstAttribute="trailing" secondItem="dH8-35-u9Y" secondAttribute="trailing" constant="10" id="Xqe-hq-Kxm"/>
+                        <constraint firstAttribute="trailing" secondItem="dH8-35-u9Y" secondAttribute="trailing" constant="12" id="Xqe-hq-Kxm"/>
                         <constraint firstItem="dH8-35-u9Y" firstAttribute="centerY" secondItem="w4w-2R-YqH" secondAttribute="centerY" id="Z1C-5o-HBo"/>
-                        <constraint firstItem="dH8-35-u9Y" firstAttribute="leading" secondItem="Sg5-z3-lFr" secondAttribute="trailing" constant="10" id="nEX-xd-gIi"/>
+                        <constraint firstItem="dH8-35-u9Y" firstAttribute="leading" secondItem="Sg5-z3-lFr" secondAttribute="trailing" constant="12" id="nEX-xd-gIi"/>
                     </constraints>
                     <connections>
                         <outletCollection property="gestureRecognizers" destination="7kx-cV-Azd" appends="YES" id="biv-0X-K3l"/>
                     </connections>
                 </view>
                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="aOO-cS-gdV">
-                    <rect key="frame" x="0.0" y="436" width="414" height="55"/>
+                    <rect key="frame" x="0.0" y="491" width="414" height="55"/>
                     <subviews>
                         <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="fl2-Rm-1E9">
-                            <rect key="frame" x="354" y="7.5" width="47" height="40"/>
+                            <rect key="frame" x="352" y="7.5" width="47" height="40"/>
                             <constraints>
                                 <constraint firstAttribute="width" constant="47" id="30N-IR-OuO"/>
                                 <constraint firstAttribute="height" constant="40" id="ZIc-CE-ru7"/>
@@ -225,7 +225,7 @@
                             </connections>
                         </button>
                         <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" layoutMarginsFollowReadableWidth="YES" text="群消息接收但不提醒" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="k5R-Vy-hE4">
-                            <rect key="frame" x="13" y="18" width="143" height="19.5"/>
+                            <rect key="frame" x="16" y="18" width="143" height="19.5"/>
                             <fontDescription key="fontDescription" type="system" pointSize="16"/>
                             <color key="textColor" red="0.1019607843" green="0.1019607843" blue="0.1019607843" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                             <nil key="highlightedColor"/>
@@ -234,24 +234,24 @@
                     <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                     <constraints>
                         <constraint firstItem="fl2-Rm-1E9" firstAttribute="centerY" secondItem="aOO-cS-gdV" secondAttribute="centerY" id="7FZ-Tr-MBK"/>
-                        <constraint firstItem="k5R-Vy-hE4" firstAttribute="leading" secondItem="aOO-cS-gdV" secondAttribute="leading" constant="13" id="dyA-fF-EdC"/>
+                        <constraint firstItem="k5R-Vy-hE4" firstAttribute="leading" secondItem="aOO-cS-gdV" secondAttribute="leading" constant="16" id="dyA-fF-EdC"/>
                         <constraint firstAttribute="height" constant="55" id="f3H-FW-bKQ"/>
                         <constraint firstItem="k5R-Vy-hE4" firstAttribute="centerY" secondItem="aOO-cS-gdV" secondAttribute="centerY" id="mXM-Wu-xYx"/>
-                        <constraint firstAttribute="trailing" secondItem="fl2-Rm-1E9" secondAttribute="trailing" constant="13" id="p2H-Bc-RbE"/>
+                        <constraint firstAttribute="trailing" secondItem="fl2-Rm-1E9" secondAttribute="trailing" constant="15" id="p2H-Bc-RbE"/>
                     </constraints>
                 </view>
                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="H5y-Vp-Aux">
-                    <rect key="frame" x="0.0" y="503" width="414" height="55"/>
+                    <rect key="frame" x="0.0" y="558" width="414" height="55"/>
                     <subviews>
                         <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="mine_next_grey" translatesAutoresizingMaskIntoConstraints="NO" id="dhO-9D-vfB">
-                            <rect key="frame" x="397" y="20.5" width="7" height="14"/>
+                            <rect key="frame" x="395" y="20.5" width="7" height="14"/>
                             <constraints>
                                 <constraint firstAttribute="width" constant="7" id="Mwr-7x-08y"/>
                                 <constraint firstAttribute="height" constant="14" id="j9v-xx-Z25"/>
                             </constraints>
                         </imageView>
                         <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" layoutMarginsFollowReadableWidth="YES" text="投诉" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="RaV-yo-qZk">
-                            <rect key="frame" x="13" y="18" width="32" height="19.5"/>
+                            <rect key="frame" x="16" y="18" width="32" height="19.5"/>
                             <fontDescription key="fontDescription" type="system" pointSize="16"/>
                             <color key="textColor" red="0.1019607843" green="0.1019607843" blue="0.1019607843" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                             <nil key="highlightedColor"/>
@@ -260,18 +260,18 @@
                     <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                     <gestureRecognizers/>
                     <constraints>
-                        <constraint firstItem="RaV-yo-qZk" firstAttribute="leading" secondItem="H5y-Vp-Aux" secondAttribute="leading" constant="13" id="4yM-zG-FmJ"/>
+                        <constraint firstItem="RaV-yo-qZk" firstAttribute="leading" secondItem="H5y-Vp-Aux" secondAttribute="leading" constant="16" id="4yM-zG-FmJ"/>
                         <constraint firstItem="dhO-9D-vfB" firstAttribute="centerY" secondItem="H5y-Vp-Aux" secondAttribute="centerY" id="FL2-eR-Ut8"/>
                         <constraint firstItem="RaV-yo-qZk" firstAttribute="centerY" secondItem="H5y-Vp-Aux" secondAttribute="centerY" id="GqM-P7-Cp7"/>
                         <constraint firstAttribute="height" constant="55" id="gHm-0O-tco"/>
-                        <constraint firstAttribute="trailing" secondItem="dhO-9D-vfB" secondAttribute="trailing" constant="10" id="xXB-Pd-yCs"/>
+                        <constraint firstAttribute="trailing" secondItem="dhO-9D-vfB" secondAttribute="trailing" constant="12" id="xXB-Pd-yCs"/>
                     </constraints>
                     <connections>
                         <outletCollection property="gestureRecognizers" destination="RP4-Dp-PNk" appends="YES" id="xWt-UT-yhY"/>
                     </connections>
                 </view>
                 <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="9Zk-Ss-xf8">
-                    <rect key="frame" x="25" y="588" width="364" height="44"/>
+                    <rect key="frame" x="25" y="643" width="364" height="44"/>
                     <color key="backgroundColor" red="0.1764705882352941" green="0.7803921568627451" blue="0.66666666666666663" alpha="1" colorSpace="calibratedRGB"/>
                     <constraints>
                         <constraint firstAttribute="height" constant="44" id="zlf-6G-YkC"/>
@@ -287,17 +287,17 @@
                     </connections>
                 </button>
                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="0hZ-Dj-wqy">
-                    <rect key="frame" x="0.0" y="319" width="414" height="55"/>
+                    <rect key="frame" x="0.0" y="374" width="414" height="55"/>
                     <subviews>
                         <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="mine_next_grey" translatesAutoresizingMaskIntoConstraints="NO" id="jgL-fA-2h0">
-                            <rect key="frame" x="397" y="20.5" width="7" height="14"/>
+                            <rect key="frame" x="395" y="20.5" width="7" height="14"/>
                             <constraints>
                                 <constraint firstAttribute="width" constant="7" id="Vsh-oH-cIl"/>
                                 <constraint firstAttribute="height" constant="14" id="pBM-IT-X3h"/>
                             </constraints>
                         </imageView>
                         <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" layoutMarginsFollowReadableWidth="YES" text="群公告" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="wGu-Ji-Izg">
-                            <rect key="frame" x="13" y="18" width="48" height="19.5"/>
+                            <rect key="frame" x="16" y="18" width="48" height="19.5"/>
                             <fontDescription key="fontDescription" type="system" pointSize="16"/>
                             <color key="textColor" red="0.1019607843" green="0.1019607843" blue="0.1019607843" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                             <nil key="highlightedColor"/>
@@ -314,18 +314,70 @@
                     <gestureRecognizers/>
                     <constraints>
                         <constraint firstAttribute="trailing" secondItem="K7k-ff-Bs3" secondAttribute="trailing" id="7K2-hG-pph"/>
-                        <constraint firstItem="wGu-Ji-Izg" firstAttribute="leading" secondItem="0hZ-Dj-wqy" secondAttribute="leading" constant="13" id="FXk-Ra-yOH"/>
+                        <constraint firstItem="wGu-Ji-Izg" firstAttribute="leading" secondItem="0hZ-Dj-wqy" secondAttribute="leading" constant="16" id="FXk-Ra-yOH"/>
                         <constraint firstItem="wGu-Ji-Izg" firstAttribute="centerY" secondItem="0hZ-Dj-wqy" secondAttribute="centerY" id="Ncj-TG-giW"/>
                         <constraint firstAttribute="height" constant="55" id="OJA-EE-coh"/>
                         <constraint firstItem="jgL-fA-2h0" firstAttribute="centerY" secondItem="0hZ-Dj-wqy" secondAttribute="centerY" id="QO5-DD-RdR"/>
                         <constraint firstItem="K7k-ff-Bs3" firstAttribute="top" secondItem="0hZ-Dj-wqy" secondAttribute="top" id="Yyy-7u-UsF"/>
-                        <constraint firstAttribute="trailing" secondItem="jgL-fA-2h0" secondAttribute="trailing" constant="10" id="b39-Pk-DXM"/>
+                        <constraint firstAttribute="trailing" secondItem="jgL-fA-2h0" secondAttribute="trailing" constant="12" id="b39-Pk-DXM"/>
                         <constraint firstItem="K7k-ff-Bs3" firstAttribute="leading" secondItem="0hZ-Dj-wqy" secondAttribute="leading" constant="16" id="bXz-DV-Cag"/>
                     </constraints>
                     <connections>
                         <outletCollection property="gestureRecognizers" destination="bpJ-RX-zB4" appends="YES" id="dVS-cS-Bxl"/>
                     </connections>
                 </view>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="9xR-Jz-RIU">
+                    <rect key="frame" x="0.0" y="319" width="414" height="55"/>
+                    <subviews>
+                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="mine_next_grey" translatesAutoresizingMaskIntoConstraints="NO" id="N3d-1K-chv">
+                            <rect key="frame" x="395" y="20.5" width="7" height="14"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="14" id="Xbz-4j-pfa"/>
+                                <constraint firstAttribute="width" constant="7" id="pjw-J2-0Tm"/>
+                            </constraints>
+                        </imageView>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" layoutMarginsFollowReadableWidth="YES" text="群简介" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="eoE-jg-6YR">
+                            <rect key="frame" x="16" y="18" width="48" height="19.5"/>
+                            <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                            <color key="textColor" red="0.1019607843" green="0.1019607843" blue="0.1019607843" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="XEh-Tu-dHA">
+                            <rect key="frame" x="16" y="0.0" width="398" height="1"/>
+                            <color key="backgroundColor" red="0.94117647059999998" green="0.94117647059999998" blue="0.94117647059999998" alpha="1" colorSpace="calibratedRGB"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="1" id="tTY-E1-8T0"/>
+                            </constraints>
+                        </view>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fEO-Ri-MQX">
+                            <rect key="frame" x="130" y="16.5" width="253" height="22"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="22" id="fRi-GX-4aZ"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                            <color key="textColor" red="0.66666666669999997" green="0.66666666669999997" blue="0.66666666669999997" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                    </subviews>
+                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                    <gestureRecognizers/>
+                    <constraints>
+                        <constraint firstAttribute="trailing" secondItem="N3d-1K-chv" secondAttribute="trailing" constant="12" id="9O8-5f-L7v"/>
+                        <constraint firstItem="fEO-Ri-MQX" firstAttribute="centerY" secondItem="9xR-Jz-RIU" secondAttribute="centerY" id="Bqt-ec-Vhp"/>
+                        <constraint firstItem="eoE-jg-6YR" firstAttribute="leading" secondItem="9xR-Jz-RIU" secondAttribute="leading" constant="16" id="If4-uQ-dgT"/>
+                        <constraint firstAttribute="trailing" secondItem="XEh-Tu-dHA" secondAttribute="trailing" id="Jf7-M6-4im"/>
+                        <constraint firstItem="XEh-Tu-dHA" firstAttribute="top" secondItem="9xR-Jz-RIU" secondAttribute="top" id="WGH-xk-WTb"/>
+                        <constraint firstItem="XEh-Tu-dHA" firstAttribute="leading" secondItem="9xR-Jz-RIU" secondAttribute="leading" constant="16" id="Zod-GT-fBW"/>
+                        <constraint firstItem="eoE-jg-6YR" firstAttribute="centerY" secondItem="9xR-Jz-RIU" secondAttribute="centerY" id="d3k-j6-t76"/>
+                        <constraint firstAttribute="height" constant="55" id="i1O-Ql-1f4"/>
+                        <constraint firstItem="N3d-1K-chv" firstAttribute="leading" secondItem="fEO-Ri-MQX" secondAttribute="trailing" constant="12" id="nqR-5O-cRf"/>
+                        <constraint firstItem="N3d-1K-chv" firstAttribute="centerY" secondItem="9xR-Jz-RIU" secondAttribute="centerY" id="tgZ-JS-usL"/>
+                        <constraint firstItem="fEO-Ri-MQX" firstAttribute="leading" secondItem="9xR-Jz-RIU" secondAttribute="leading" constant="130" id="w8w-qc-ssx"/>
+                    </constraints>
+                    <connections>
+                        <outletCollection property="gestureRecognizers" destination="Mvk-Cf-13u" appends="YES" id="ydx-oi-iY9"/>
+                    </connections>
+                </view>
             </subviews>
             <color key="backgroundColor" red="0.96470588235294119" green="0.97254901960784312" blue="0.97647058823529409" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
             <constraints>
@@ -334,6 +386,7 @@
                 <constraint firstItem="AOx-4a-71e" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="10" id="6sx-4K-fmr"/>
                 <constraint firstAttribute="trailing" secondItem="0hZ-Dj-wqy" secondAttribute="trailing" id="7J3-AE-4RE"/>
                 <constraint firstItem="aOO-cS-gdV" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="7Ml-qH-PPT"/>
+                <constraint firstItem="9xR-Jz-RIU" firstAttribute="top" secondItem="hNX-kx-Qhp" secondAttribute="bottom" id="A9h-eC-4x2"/>
                 <constraint firstItem="0hZ-Dj-wqy" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="AoA-pe-YVq"/>
                 <constraint firstAttribute="trailing" secondItem="H5y-Vp-Aux" secondAttribute="trailing" id="DZc-LC-mJn"/>
                 <constraint firstItem="fRV-DB-sBs" firstAttribute="top" secondItem="AOx-4a-71e" secondAttribute="bottom" constant="12" id="E1k-Ju-fB8"/>
@@ -342,9 +395,11 @@
                 <constraint firstItem="fRV-DB-sBs" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="KfE-Ms-nB3"/>
                 <constraint firstItem="hNX-kx-Qhp" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="Ki4-NK-uXf"/>
                 <constraint firstItem="9Zk-Ss-xf8" firstAttribute="top" secondItem="H5y-Vp-Aux" secondAttribute="bottom" constant="30" id="N1t-gx-92V"/>
+                <constraint firstAttribute="trailing" secondItem="9xR-Jz-RIU" secondAttribute="trailing" id="OTC-9z-kOn"/>
                 <constraint firstItem="hNX-kx-Qhp" firstAttribute="top" secondItem="fRV-DB-sBs" secondAttribute="bottom" constant="12" id="On8-mJ-2uf"/>
-                <constraint firstItem="0hZ-Dj-wqy" firstAttribute="top" secondItem="hNX-kx-Qhp" secondAttribute="bottom" id="P3C-u8-fgM"/>
+                <constraint firstItem="9xR-Jz-RIU" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="Tef-gW-4Yn"/>
                 <constraint firstAttribute="trailing" secondItem="AOx-4a-71e" secondAttribute="trailing" id="VHK-38-OtQ"/>
+                <constraint firstItem="0hZ-Dj-wqy" firstAttribute="top" secondItem="9xR-Jz-RIU" secondAttribute="bottom" id="X6M-Ge-hQJ"/>
                 <constraint firstAttribute="trailing" secondItem="fRV-DB-sBs" secondAttribute="trailing" id="XuH-sa-ebf"/>
                 <constraint firstItem="UZO-j7-eJs" firstAttribute="top" secondItem="0hZ-Dj-wqy" secondAttribute="bottom" id="ZG6-08-8Xi"/>
                 <constraint firstItem="H5y-Vp-Aux" firstAttribute="top" secondItem="aOO-cS-gdV" secondAttribute="bottom" constant="12" id="a7d-nB-oLp"/>
@@ -399,6 +454,11 @@
                 <action selector="feedBack:" destination="iN0-l3-epB" id="8dM-yn-lG9"/>
             </connections>
         </tapGestureRecognizer>
+        <tapGestureRecognizer id="Mvk-Cf-13u">
+            <connections>
+                <action selector="groupIntroduce:" destination="iN0-l3-epB" id="pXZ-kM-ldx"/>
+            </connections>
+        </tapGestureRecognizer>
     </objects>
     <resources>
         <image name="chat_group_Logo" width="300" height="300"/>