Browse Source

好友推荐

桂欢 2 years ago
parent
commit
7272d97a5c

+ 20 - 0
SLAiELTS/SLAiELTS.xcodeproj/project.pbxproj

@@ -127,6 +127,10 @@
 		3D5BC38B29E3E77400748197 /* SLMoentsChatView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D5BC38A29E3E77400748197 /* SLMoentsChatView.m */; };
 		3D5BC38F29E3F87100748197 /* SLFriensInfoVc.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D5BC38D29E3F87100748197 /* SLFriensInfoVc.m */; };
 		3D5BC39029E3F87100748197 /* SLFriensInfoVc.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3D5BC38E29E3F87100748197 /* SLFriensInfoVc.xib */; };
+		3D6EE45329F2568000B02EBB /* SLRecomFriendsVc.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D6EE45129F2568000B02EBB /* SLRecomFriendsVc.m */; };
+		3D6EE45429F2568000B02EBB /* SLRecomFriendsVc.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3D6EE45229F2568000B02EBB /* SLRecomFriendsVc.xib */; };
+		3D6EE45829F25AB400B02EBB /* SLRecomFriendsCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D6EE45629F25AB400B02EBB /* SLRecomFriendsCell.m */; };
+		3D6EE45929F25AB400B02EBB /* SLRecomFriendsCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3D6EE45729F25AB400B02EBB /* SLRecomFriendsCell.xib */; };
 		3D796C6C29B8305C00B7B28A /* NSObject+FBKVOController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D796C6929B8305C00B7B28A /* NSObject+FBKVOController.m */; };
 		3D796C6D29B8305C00B7B28A /* FBKVOController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D796C6A29B8305C00B7B28A /* FBKVOController.m */; };
 		3D8515D729CD92A400418BAB /* JXCategoryTitleBackgroundCellModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8515D129CD92A400418BAB /* JXCategoryTitleBackgroundCellModel.m */; };
@@ -471,6 +475,12 @@
 		3D5BC38C29E3F87100748197 /* SLFriensInfoVc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SLFriensInfoVc.h; sourceTree = "<group>"; };
 		3D5BC38D29E3F87100748197 /* SLFriensInfoVc.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SLFriensInfoVc.m; sourceTree = "<group>"; };
 		3D5BC38E29E3F87100748197 /* SLFriensInfoVc.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SLFriensInfoVc.xib; sourceTree = "<group>"; };
+		3D6EE45029F2568000B02EBB /* SLRecomFriendsVc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SLRecomFriendsVc.h; sourceTree = "<group>"; };
+		3D6EE45129F2568000B02EBB /* SLRecomFriendsVc.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SLRecomFriendsVc.m; sourceTree = "<group>"; };
+		3D6EE45229F2568000B02EBB /* SLRecomFriendsVc.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SLRecomFriendsVc.xib; sourceTree = "<group>"; };
+		3D6EE45529F25AB400B02EBB /* SLRecomFriendsCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SLRecomFriendsCell.h; sourceTree = "<group>"; };
+		3D6EE45629F25AB400B02EBB /* SLRecomFriendsCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SLRecomFriendsCell.m; sourceTree = "<group>"; };
+		3D6EE45729F25AB400B02EBB /* SLRecomFriendsCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SLRecomFriendsCell.xib; sourceTree = "<group>"; };
 		3D796C6729B8305C00B7B28A /* KVOController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KVOController.h; sourceTree = "<group>"; };
 		3D796C6829B8305C00B7B28A /* FBKVOController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBKVOController.h; sourceTree = "<group>"; };
 		3D796C6929B8305C00B7B28A /* NSObject+FBKVOController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+FBKVOController.m"; sourceTree = "<group>"; };
@@ -839,6 +849,9 @@
 				3D24D3FF29DE96A700014D1C /* SLAddressBookVc.h */,
 				3D24D40029DE96A700014D1C /* SLAddressBookVc.m */,
 				3D24D40129DE96A700014D1C /* SLAddressBookVc.xib */,
+				3D6EE45029F2568000B02EBB /* SLRecomFriendsVc.h */,
+				3D6EE45129F2568000B02EBB /* SLRecomFriendsVc.m */,
+				3D6EE45229F2568000B02EBB /* SLRecomFriendsVc.xib */,
 			);
 			path = AddressBookVC;
 			sourceTree = "<group>";
@@ -865,6 +878,9 @@
 				3D24D67929DFA1F100014D1C /* SLRemidLookView.h */,
 				3D24D67A29DFA1F100014D1C /* SLRemidLookView.m */,
 				3D24D67C29DFA23200014D1C /* SLRemidLookView.xib */,
+				3D6EE45529F25AB400B02EBB /* SLRecomFriendsCell.h */,
+				3D6EE45629F25AB400B02EBB /* SLRecomFriendsCell.m */,
+				3D6EE45729F25AB400B02EBB /* SLRecomFriendsCell.xib */,
 			);
 			path = Views;
 			sourceTree = "<group>";
@@ -1818,6 +1834,7 @@
 			files = (
 				3D1B9D0D29C2A1360008D01A /* SLPlaceholderCell.xib in Resources */,
 				3D1B9CF929C071AD0008D01A /* SLFeedbackVc.xib in Resources */,
+				3D6EE45929F25AB400B02EBB /* SLRecomFriendsCell.xib in Resources */,
 				3DF3DAB329B9B86200CAD3AB /* SLUserCenterViewController.xib in Resources */,
 				3DB97D6C29D6ABC100B12754 /* sdRefeshView_arrow@2x.png in Resources */,
 				3D25106129AC95A9000AE530 /* SLRetrievePWViewController.xib in Resources */,
@@ -1862,6 +1879,7 @@
 				3DB97D9A29D6ABF000B12754 /* LICENSE in Resources */,
 				3D1B989029BEF1AC0008D01A /* SLVocabularyCell.xib in Resources */,
 				3D1B988029BEEA670008D01A /* SLVocabularyView.xib in Resources */,
+				3D6EE45429F2568000B02EBB /* SLRecomFriendsVc.xib in Resources */,
 				3D2DC3F629B1E6510041A729 /* SLMikeInputView.xib in Resources */,
 				3D2D8BFF29DE6389009392DA /* SLHomeMsgCollectionViewCell.xib in Resources */,
 				3D25105C29AC9475000AE530 /* SLForgetPWViewController.xib in Resources */,
@@ -1956,6 +1974,7 @@
 				3DB97D9B29D6ABF000B12754 /* NSMutableAttributedString+MLLabel.m in Sources */,
 				3D24986C29AC72E2003C3AFA /* SLLoginVCViewController.m in Sources */,
 				3DF3DAF129BB131100CAD3AB /* RDVTabBarController.m in Sources */,
+				3D6EE45329F2568000B02EBB /* SLRecomFriendsVc.m in Sources */,
 				3DF3DAF529BB170F00CAD3AB /* SLHomeView.m in Sources */,
 				3D19CBFA29E7ABFD0041A6B8 /* TTTableViewPlaceView.m in Sources */,
 				3DB97DA029D6ABF000B12754 /* MLTextAttachment.m in Sources */,
@@ -2013,6 +2032,7 @@
 				3D1B989329BEF5960008D01A /* SLLxView.m in Sources */,
 				3D99620029CD2FFA0076DBD1 /* SLListViewController.m in Sources */,
 				3D2510B929AF1970000AE530 /* SLHttpCenter.m in Sources */,
+				3D6EE45829F25AB400B02EBB /* SLRecomFriendsCell.m in Sources */,
 				3D2D8BD529DE5402009392DA /* AddressBookCell.m in Sources */,
 				3DA5AF7429B96726009E4925 /* SLMeHeaderCollectionViewCell.m in Sources */,
 				3DB97D4D29D6AAC500B12754 /* UITableView+SDAutoTableViewCellHeight.m in Sources */,

+ 22 - 0
SLAiELTS/SLAiELTS/Assets.xcassets/Moents/icon_f_refresh.imageset/Contents.json

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

BIN
SLAiELTS/SLAiELTS/Assets.xcassets/Moents/icon_f_refresh.imageset/icon_f_refresh@2x.png


BIN
SLAiELTS/SLAiELTS/Assets.xcassets/Moents/icon_f_refresh.imageset/icon_f_refresh@3x.png


+ 6 - 0
SLAiELTS/SLAiELTS/ViewControllers/AddressBookVC/SLAddressBookVc.m

@@ -12,6 +12,7 @@
 #import "SLFriendsModel.h"
 #import "SLFriensInfoVc.h"
 #import "SLAddFriendVc.h"
+#import "SLRecomFriendsVc.h"
 
 @interface SLAddressBookVc ()<UITableViewDelegate, UITableViewDataSource>
 @property (weak, nonatomic) IBOutlet SLCustNavView *navView;
@@ -124,6 +125,11 @@
     self.tableView.tableFooterView = [[UIView alloc]initWithFrame:CGRectZero];
 }
 
+- (IBAction)recomFriendBtnClick:(id)sender {
+    SLRecomFriendsVc *vc = (SLRecomFriendsVc *)[SLRecomFriendsVc loadViewControllewWithNib];
+    [self navPushViewController:vc animated:YES];
+}
+
 - (void)preserveBtnClick {
     __block NSMutableArray *marr = [NSMutableArray array];
     [self.nameDic.allValues enumerateObjectsUsingBlock:^(NSArray * obj, NSUInteger idx, BOOL * _Nonnull stop) {

+ 3 - 0
SLAiELTS/SLAiELTS/ViewControllers/AddressBookVC/SLAddressBookVc.xib

@@ -40,6 +40,9 @@
                             <state key="normal" title="推荐好友" image="icon_lx_tjhy">
                                 <color key="titleColor" systemColor="labelColor"/>
                             </state>
+                            <connections>
+                                <action selector="recomFriendBtnClick:" destination="-1" eventType="touchUpInside" id="xTl-cU-Kmf"/>
+                            </connections>
                         </button>
                         <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="I5T-gL-Q0c">
                             <rect key="frame" x="224.66666666666663" y="31.000000000000004" width="136" height="50.333333333333343"/>

+ 16 - 0
SLAiELTS/SLAiELTS/ViewControllers/AddressBookVC/SLRecomFriendsVc.h

@@ -0,0 +1,16 @@
+//
+//  SLRecomFriendsVc.h
+//  SLAiELTS
+//
+//  Created by Gusont on 2023/4/21.
+//
+
+#import "SLBaseViewController.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SLRecomFriendsVc : SLBaseViewController
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 71 - 0
SLAiELTS/SLAiELTS/ViewControllers/AddressBookVC/SLRecomFriendsVc.m

@@ -0,0 +1,71 @@
+//
+//  SLRecomFriendsVc.m
+//  SLAiELTS
+//
+//  Created by Gusont on 2023/4/21.
+//
+
+#import "SLRecomFriendsVc.h"
+#import "LeftImageDesignTxtxField.h"
+#import "SLRecomFriendsCell.h"
+
+@interface SLRecomFriendsVc ()<UITableViewDelegate, UITableViewDataSource>
+
+@property (weak, nonatomic) IBOutlet NSLayoutConstraint *topConst;
+
+@property (weak, nonatomic) IBOutlet LeftImageDesignTxtxField *textField;
+
+@property (weak, nonatomic) IBOutlet UITableView *tableView;
+
+@property (nonatomic, strong) NSMutableArray *friendsModel;
+
+@end
+
+@implementation SLRecomFriendsVc
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view from its nib.
+    [self.tableView registerNibCellWithReuseIdentifierClass:SLRecomFriendsCell.class];
+    self.topConst.constant = kNavBarHeight;
+    self.navigationBar.separatorHeight = 0.0f;
+    self.title = @"推荐好友";
+}
+
+-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
+    return 10;
+}
+
+-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
+    SLRecomFriendsCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass(SLRecomFriendsCell.class)];
+    return cell;
+}
+
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    
+}
+
+- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
+    return 80.0f;
+}
+
+- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
+    return [[UIView alloc] initWithFrame:CGRectZero];
+}
+
+-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
+    return 0.001f;
+}
+
+-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
+    return 0.001f;
+}
+
+- (NSMutableArray *)friendsModel {
+    if (!_friendsModel) {
+        _friendsModel = [NSMutableArray array];
+    }
+    return _friendsModel;
+}
+
+@end

+ 119 - 0
SLAiELTS/SLAiELTS/ViewControllers/AddressBookVC/SLRecomFriendsVc.xib

@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21225" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+    <device id="retina6_0" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21207"/>
+        <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"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="SLRecomFriendsVc">
+            <connections>
+                <outlet property="tableView" destination="4Hd-tI-svx" id="D8w-NB-d0J"/>
+                <outlet property="textField" destination="1lw-iM-hR8" id="aTg-0c-Y0p"/>
+                <outlet property="topConst" destination="hA3-Nc-wmY" id="MEo-eD-cUc"/>
+                <outlet property="view" destination="DTa-iB-OMQ" id="bPy-i7-UPy"/>
+            </connections>
+        </placeholder>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="DTa-iB-OMQ">
+            <rect key="frame" x="0.0" y="0.0" width="390" height="844"/>
+            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+            <subviews>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="G9H-k1-iTF">
+                    <rect key="frame" x="0.0" y="100" width="390" height="56"/>
+                    <subviews>
+                        <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="搜索" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="1lw-iM-hR8" customClass="LeftImageDesignTxtxField">
+                            <rect key="frame" x="16" y="8" width="358" height="40"/>
+                            <color key="backgroundColor" red="0.95294117649999999" green="0.95294117649999999" blue="0.95294117649999999" alpha="1" colorSpace="calibratedRGB"/>
+                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                            <textInputTraits key="textInputTraits" returnKeyType="search"/>
+                            <userDefinedRuntimeAttributes>
+                                <userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
+                                    <integer key="value" value="20"/>
+                                </userDefinedRuntimeAttribute>
+                                <userDefinedRuntimeAttribute type="image" keyPath="leftImage" value="icon_search"/>
+                            </userDefinedRuntimeAttributes>
+                            <connections>
+                                <outlet property="delegate" destination="-1" id="T5o-GH-hav"/>
+                            </connections>
+                        </textField>
+                    </subviews>
+                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                    <constraints>
+                        <constraint firstItem="1lw-iM-hR8" firstAttribute="top" secondItem="G9H-k1-iTF" secondAttribute="top" constant="8" id="4n3-Dg-vwO"/>
+                        <constraint firstItem="1lw-iM-hR8" firstAttribute="leading" secondItem="G9H-k1-iTF" secondAttribute="leading" constant="16" id="6Vf-ah-xuO"/>
+                        <constraint firstItem="1lw-iM-hR8" firstAttribute="centerX" secondItem="G9H-k1-iTF" secondAttribute="centerX" id="cIv-X0-5fG"/>
+                        <constraint firstAttribute="height" constant="56" id="m7c-xE-gyl"/>
+                        <constraint firstItem="1lw-iM-hR8" firstAttribute="centerY" secondItem="G9H-k1-iTF" secondAttribute="centerY" id="ysE-dg-u3c"/>
+                    </constraints>
+                </view>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="6T9-CQ-vWA">
+                    <rect key="frame" x="0.0" y="166" width="390" height="40"/>
+                    <subviews>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="好友推荐" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="LNv-tN-XbQ">
+                            <rect key="frame" x="16" y="10.333333333333341" width="65.333333333333329" height="19.333333333333329"/>
+                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
+                            <nil key="textColor"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="mbz-2e-TbV">
+                            <rect key="frame" x="352" y="4" width="26" height="32"/>
+                            <constraints>
+                                <constraint firstAttribute="width" secondItem="mbz-2e-TbV" secondAttribute="height" multiplier="9:11" id="RfK-aE-Lcc"/>
+                                <constraint firstAttribute="width" constant="26" id="Xcp-iR-qB8"/>
+                            </constraints>
+                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <state key="normal" image="icon_f_refresh"/>
+                        </button>
+                    </subviews>
+                    <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <constraints>
+                        <constraint firstItem="LNv-tN-XbQ" firstAttribute="centerY" secondItem="6T9-CQ-vWA" secondAttribute="centerY" id="3mk-2x-u2e"/>
+                        <constraint firstAttribute="trailing" secondItem="mbz-2e-TbV" secondAttribute="trailing" constant="12" id="qk9-BB-mJp"/>
+                        <constraint firstItem="LNv-tN-XbQ" firstAttribute="leading" secondItem="6T9-CQ-vWA" secondAttribute="leading" constant="16" id="swy-HU-M1m"/>
+                        <constraint firstItem="mbz-2e-TbV" firstAttribute="centerY" secondItem="LNv-tN-XbQ" secondAttribute="centerY" id="uFk-nO-x0p"/>
+                    </constraints>
+                </view>
+                <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" style="grouped" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="18" estimatedSectionHeaderHeight="-1" sectionFooterHeight="18" estimatedSectionFooterHeight="-1" translatesAutoresizingMaskIntoConstraints="NO" id="4Hd-tI-svx">
+                    <rect key="frame" x="0.0" y="206" width="390" height="604"/>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <connections>
+                        <outlet property="dataSource" destination="-1" id="MUw-zi-6hT"/>
+                        <outlet property="delegate" destination="-1" id="yUj-i1-eRy"/>
+                    </connections>
+                </tableView>
+            </subviews>
+            <viewLayoutGuide key="safeArea" id="YNg-vM-DsK"/>
+            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+            <constraints>
+                <constraint firstItem="6T9-CQ-vWA" firstAttribute="top" secondItem="G9H-k1-iTF" secondAttribute="bottom" constant="10" id="CA7-od-gpa"/>
+                <constraint firstItem="4Hd-tI-svx" firstAttribute="trailing" secondItem="YNg-vM-DsK" secondAttribute="trailing" id="JSJ-j8-bSB"/>
+                <constraint firstItem="4Hd-tI-svx" firstAttribute="top" secondItem="6T9-CQ-vWA" secondAttribute="bottom" id="Le6-1u-F8u"/>
+                <constraint firstItem="YNg-vM-DsK" firstAttribute="bottom" secondItem="4Hd-tI-svx" secondAttribute="bottom" id="OTE-Js-6gh"/>
+                <constraint firstItem="4Hd-tI-svx" firstAttribute="leading" secondItem="YNg-vM-DsK" secondAttribute="leading" id="Umx-lj-Xzz"/>
+                <constraint firstItem="G9H-k1-iTF" firstAttribute="leading" secondItem="YNg-vM-DsK" secondAttribute="leading" id="VPA-GY-hgl"/>
+                <constraint firstItem="YNg-vM-DsK" firstAttribute="trailing" secondItem="6T9-CQ-vWA" secondAttribute="trailing" id="b1N-SY-k6o"/>
+                <constraint firstItem="YNg-vM-DsK" firstAttribute="trailing" secondItem="G9H-k1-iTF" secondAttribute="trailing" id="ehd-gt-39H"/>
+                <constraint firstItem="G9H-k1-iTF" firstAttribute="top" secondItem="DTa-iB-OMQ" secondAttribute="top" constant="100" id="hA3-Nc-wmY"/>
+                <constraint firstItem="4Hd-tI-svx" firstAttribute="top" secondItem="G9H-k1-iTF" secondAttribute="bottom" constant="50" id="oAy-8W-rdh"/>
+                <constraint firstItem="6T9-CQ-vWA" firstAttribute="leading" secondItem="YNg-vM-DsK" secondAttribute="leading" id="pfh-Xe-9zz"/>
+            </constraints>
+            <point key="canvasLocation" x="136.92307692307691" y="-1.4218009478672986"/>
+        </view>
+    </objects>
+    <designables>
+        <designable name="1lw-iM-hR8">
+            <size key="intrinsicContentSize" width="72.666666666666671" height="18.666666666666668"/>
+        </designable>
+    </designables>
+    <resources>
+        <image name="icon_f_refresh" width="18.333333969116211" height="18.333333969116211"/>
+        <image name="icon_search" width="24" height="24"/>
+        <systemColor name="systemBackgroundColor">
+            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+        </systemColor>
+    </resources>
+</document>

+ 16 - 0
SLAiELTS/SLAiELTS/ViewControllers/AddressBookVC/Views/SLRecomFriendsCell.h

@@ -0,0 +1,16 @@
+//
+//  SLRecomFriendsCell.h
+//  SLAiELTS
+//
+//  Created by Gusont on 2023/4/21.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SLRecomFriendsCell : UITableViewCell
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 23 - 0
SLAiELTS/SLAiELTS/ViewControllers/AddressBookVC/Views/SLRecomFriendsCell.m

@@ -0,0 +1,23 @@
+//
+//  SLRecomFriendsCell.m
+//  SLAiELTS
+//
+//  Created by Gusont on 2023/4/21.
+//
+
+#import "SLRecomFriendsCell.h"
+
+@implementation SLRecomFriendsCell
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end

+ 56 - 0
SLAiELTS/SLAiELTS/ViewControllers/AddressBookVC/Views/SLRecomFriendsCell.xib

@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21225" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+    <device id="retina6_0" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21207"/>
+        <capability name="Safe area layout guides" minToolsVersion="9.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"/>
+        <tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" rowHeight="114" id="KGk-i7-Jjw" customClass="SLRecomFriendsCell">
+            <rect key="frame" x="0.0" y="0.0" width="374" height="114"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+            <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">
+                <rect key="frame" x="0.0" y="0.0" width="374" height="114"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_ellipse" translatesAutoresizingMaskIntoConstraints="NO" id="Kih-80-ush">
+                        <rect key="frame" x="16" y="33" width="48" height="48"/>
+                        <constraints>
+                            <constraint firstAttribute="width" constant="48" id="RB0-Hl-vyg"/>
+                            <constraint firstAttribute="height" constant="48" id="faa-Gg-xKV"/>
+                        </constraints>
+                    </imageView>
+                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="有3个共同好友" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="C25-qG-NjY">
+                        <rect key="frame" x="80" y="50" width="81.333333333333314" height="14.333333333333329"/>
+                        <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                        <color key="textColor" red="0.68235294117647061" green="0.68235294117647061" blue="0.69803921568627447" alpha="1" colorSpace="calibratedRGB"/>
+                        <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="XOL-Cc-SRD">
+                        <rect key="frame" x="80" y="26.666666666666671" width="65.333333333333314" height="19.333333333333329"/>
+                        <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
+                        <nil key="textColor"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                </subviews>
+                <constraints>
+                    <constraint firstItem="C25-qG-NjY" firstAttribute="top" secondItem="XOL-Cc-SRD" secondAttribute="bottom" constant="4" id="KXJ-sM-0xX"/>
+                    <constraint firstItem="XOL-Cc-SRD" firstAttribute="leading" secondItem="C25-qG-NjY" secondAttribute="leading" id="bdu-hA-7Ig"/>
+                    <constraint firstItem="Kih-80-ush" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="16" id="jN2-br-OTG"/>
+                    <constraint firstItem="Kih-80-ush" firstAttribute="centerY" secondItem="H2p-sc-9uM" secondAttribute="centerY" id="jOy-j1-d4A"/>
+                    <constraint firstItem="C25-qG-NjY" firstAttribute="centerY" secondItem="Kih-80-ush" secondAttribute="centerY" id="vKR-CJ-I7t"/>
+                    <constraint firstItem="C25-qG-NjY" firstAttribute="leading" secondItem="Kih-80-ush" secondAttribute="trailing" constant="16" id="zJJ-Yc-GwR"/>
+                </constraints>
+            </tableViewCellContentView>
+            <viewLayoutGuide key="safeArea" id="aW0-zy-SZf"/>
+            <point key="canvasLocation" x="95.384615384615387" y="23.459715639810426"/>
+        </tableViewCell>
+    </objects>
+    <resources>
+        <image name="icon_ellipse" width="52.333332061767578" height="52.333332061767578"/>
+    </resources>
+</document>