فهرست منبع

我的课程搜索

Steven 10 ماه پیش
والد
کامیت
b3111a85e3
27فایلهای تغییر یافته به همراه885 افزوده شده و 38 حذف شده
  1. 10 0
      KulexiuForTeacher/KulexiuForTeacher.xcodeproj/project.pbxproj
  2. 2 2
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/Feedback/sort_down_grey.imageset/Contents.json
  3. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/Feedback/sort_down_grey.imageset/sort_down_grey@2x.png
  4. 0 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/Feedback/sort_down_grey.imageset/sort_down_grey@3x.png
  5. 1 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/TenantGroupCreate/TenantGroupSortView.m
  6. 2 2
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/MyCourse/Controller/MyCourseViewController.m
  7. 60 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/MyCourse/View/AccompanyCourseGroup/MyAccompanyCourseGroupView.m
  8. 58 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/MyCourse/View/LiveCourseGroup/MyLiveCourseGroupView.m
  9. 59 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/MyCourse/View/MusicRoomCourseGroup/MyMusicRoomCourseGroupView.m
  10. 33 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/MyCourse/View/MyCourseSortView/MyCourseRankSortView.h
  11. 338 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/MyCourse/View/MyCourseSortView/MyCourseRankSortView.m
  12. 140 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/MyCourse/View/MyCourseSortView/MyCourseRankSortView.xib
  13. 15 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/MyCourse/View/MyCourseSortView/MyCourseSearchView.m
  14. 4 2
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/MyCourse/View/MyCourseSortView/MyCourseSearchView.xib
  15. 59 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/MyCourse/View/VIPCourseGroup/MyVipCourseGroupView.m
  16. 43 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/MyCourse/View/VideoCourseGroup/MyVideoCourseGroupView.m
  17. 1 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Feedback/View/FeedbackListNavView.m
  18. 6 6
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Feedback/View/FeedbackListNavView.xib
  19. 8 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/Controller/MinePageViewController.m
  20. 7 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/Controller/MineVipProgramViewController.m
  21. 6 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/AccompanyCourse/MinePageAccompanyCourseView.m
  22. 1 3
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/HeadView/MinePageTopView.m
  23. 5 5
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/HeadView/MinePageTopView.xib
  24. 5 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageLiveCourse/MinePageLiveCourseView.m
  25. 6 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MineVideoCourse/MinePageVideoCourseView.m
  26. 10 10
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/VIPProgramCreate/MineVipProgramMainView.m
  27. 6 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/VipCourse/MinePageVIPCourseView.m

+ 10 - 0
KulexiuForTeacher/KulexiuForTeacher.xcodeproj/project.pbxproj

@@ -725,6 +725,8 @@
 		BC71DF2B2A8A0432003F165E /* KSWhiteboardRefreshView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC71DF292A8A0432003F165E /* KSWhiteboardRefreshView.m */; };
 		BC71DF2E2A8A2233003F165E /* KSNewWhiteBoard.m in Sources */ = {isa = PBXBuildFile; fileRef = BC71DF2C2A8A2233003F165E /* KSNewWhiteBoard.m */; };
 		BC7354612CEDF05200C2B35C /* CoursePargramListModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BC7354602CEDF05200C2B35C /* CoursePargramListModel.m */; };
+		BC73549D2CEED5A400C2B35C /* MyCourseRankSortView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC73549C2CEED5A400C2B35C /* MyCourseRankSortView.m */; };
+		BC73549F2CEED5AD00C2B35C /* MyCourseRankSortView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC73549E2CEED5AD00C2B35C /* MyCourseRankSortView.xib */; };
 		BC73A1F42809693F00FA8F6F /* EvaluateSortView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC73A1F32809693F00FA8F6F /* EvaluateSortView.xib */; };
 		BC76146A280D4F670080FD1F /* HomeworkDetailModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BC761468280D4F660080FD1F /* HomeworkDetailModel.m */; };
 		BC76146D280D571B0080FD1F /* HomeworkVideoView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC76146C280D571B0080FD1F /* HomeworkVideoView.m */; };
@@ -2405,6 +2407,9 @@
 		BC71DF2D2A8A2233003F165E /* KSNewWhiteBoard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KSNewWhiteBoard.h; sourceTree = "<group>"; };
 		BC73545F2CEDF05200C2B35C /* CoursePargramListModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CoursePargramListModel.h; sourceTree = "<group>"; };
 		BC7354602CEDF05200C2B35C /* CoursePargramListModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CoursePargramListModel.m; sourceTree = "<group>"; };
+		BC73549B2CEED5A400C2B35C /* MyCourseRankSortView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MyCourseRankSortView.h; sourceTree = "<group>"; };
+		BC73549C2CEED5A400C2B35C /* MyCourseRankSortView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MyCourseRankSortView.m; sourceTree = "<group>"; };
+		BC73549E2CEED5AD00C2B35C /* MyCourseRankSortView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MyCourseRankSortView.xib; sourceTree = "<group>"; };
 		BC73A1F32809693F00FA8F6F /* EvaluateSortView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = EvaluateSortView.xib; sourceTree = "<group>"; };
 		BC761468280D4F660080FD1F /* HomeworkDetailModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeworkDetailModel.m; sourceTree = "<group>"; };
 		BC761469280D4F660080FD1F /* HomeworkDetailModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeworkDetailModel.h; sourceTree = "<group>"; };
@@ -7336,6 +7341,9 @@
 				BCD1604A2CED7F2E00A78B43 /* MyCourseSearchView.h */,
 				BCD1604B2CED7F2E00A78B43 /* MyCourseSearchView.m */,
 				BCD1604D2CED7F3600A78B43 /* MyCourseSearchView.xib */,
+				BC73549B2CEED5A400C2B35C /* MyCourseRankSortView.h */,
+				BC73549C2CEED5A400C2B35C /* MyCourseRankSortView.m */,
+				BC73549E2CEED5AD00C2B35C /* MyCourseRankSortView.xib */,
 			);
 			path = MyCourseSortView;
 			sourceTree = "<group>";
@@ -8156,6 +8164,7 @@
 				BC71D1ED2887FDD40010F14B /* img_11.png in Resources */,
 				BC9AA0C02ABC3C5800CD954D /* ChatComplainBottomView.xib in Resources */,
 				BC12638228FEB5B900509E90 /* RecentMusicView.xib in Resources */,
+				BC73549F2CEED5AD00C2B35C /* MyCourseRankSortView.xib in Resources */,
 				BCA9CE3A27FD93EB00D558C6 /* AccompanyStudentEvaCell.xib in Resources */,
 				BCE6A09627F823DC00C97704 /* MinePageMusicCell.xib in Resources */,
 				BC4BCE722823A03A00522C8B /* AddressBottomView.xib in Resources */,
@@ -9004,6 +9013,7 @@
 				BC1E28502C77218A0063E0A1 /* KSDeleteFailedAlertView.m in Sources */,
 				BC106B7F2A8F4586000759A9 /* TXLiveMessagePauseLive.m in Sources */,
 				BC60E3BD287D294C00B05441 /* AccountDeleteViewController.m in Sources */,
+				BC73549D2CEED5A400C2B35C /* MyCourseRankSortView.m in Sources */,
 				BC56C95829233F1700AF301F /* CoursewareBottomView.m in Sources */,
 				BC6BEAAA288E3D7400022109 /* HomeNewHeadView.m in Sources */,
 				277D431A27E9991200107DB7 /* ModifyViewController.m in Sources */,

+ 2 - 2
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/Feedback/sort_up_grey.imageset/Contents.json → KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/Feedback/sort_down_grey.imageset/Contents.json

@@ -5,12 +5,12 @@
       "scale" : "1x"
     },
     {
-      "filename" : "sort_up_grey@2x.png",
+      "filename" : "sort_down_grey@2x.png",
       "idiom" : "universal",
       "scale" : "2x"
     },
     {
-      "filename" : "sort_up_grey@3x.png",
+      "filename" : "sort_down_grey@3x.png",
       "idiom" : "universal",
       "scale" : "3x"
     }

+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/Feedback/sort_up_grey.imageset/sort_up_grey@2x.png → KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/Feedback/sort_down_grey.imageset/sort_down_grey@2x.png


+ 0 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/Feedback/sort_up_grey.imageset/sort_up_grey@3x.png → KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/Feedback/sort_down_grey.imageset/sort_down_grey@3x.png


+ 1 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/View/TenantGroupCreate/TenantGroupSortView.m

@@ -291,6 +291,7 @@
     [self resetView];
     self.callback(SORTACTION_SEARCH, @{});
 }
+
 - (void)resetView {
     if (self.subjectChooseIndex != 0) {
         [self modifyButtonStatus:NO buttonIndex:self.subjectChooseIndex];

+ 2 - 2
KulexiuForTeacher/KulexiuForTeacher/Module/Home/MyCourse/Controller/MyCourseViewController.m

@@ -126,8 +126,8 @@
             NSMutableArray *subjectArray = [NSMutableArray array];
             for (NSDictionary *parm in dataArray) {
                 NSMutableDictionary *subjectSource = [NSMutableDictionary dictionary];
-                [subjectSource setValue:[parm ks_stringValueForKey:@"id"] forKey:@"subjectId"];
-                [subjectSource setValue:[parm ks_stringValueForKey:@"name"] forKey:@"subjectName"];
+                [subjectSource setValue:[parm ks_stringValueForKey:@"id"] forKey:@"id"];
+                [subjectSource setValue:[parm ks_stringValueForKey:@"name"] forKey:@"name"];
                 [subjectArray addObject:subjectSource];
             }
             self.subjectList = [subjectArray mutableCopy];

+ 60 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Home/MyCourse/View/AccompanyCourseGroup/MyAccompanyCourseGroupView.m

@@ -11,6 +11,7 @@
 #import "StateView.h"
 #import "Reachability.h"
 #import "ProgramCourseGroupModel.h"
+#import "MyCourseRankSortView.h"
 
 @interface MyAccompanyCourseGroupView ()<UITableViewDelegate,UITableViewDataSource>
 
@@ -31,8 +32,15 @@
 
 @property (nonatomic, strong) NSString *subjectId;
 
+@property (nonatomic, assign) NSInteger subjectChooseIndex;
+
 @property (nonatomic, strong) NSString *status;
 
+@property (nonatomic, assign) NSInteger statusChooseIndex;
+@property (nonatomic, strong) MyCourseRankSortView *sortView;
+
+@property (nonatomic, strong) NSMutableArray *statusArray;
+
 @end
 
 
@@ -209,7 +217,7 @@
     switch (type) {
         case MY_COURSE_SORT_RANK:
         {
-            
+            [self showSortView];
         }
             break;
         case MY_COURSE_SORT_SEARCH:
@@ -222,6 +230,12 @@
     }
 }
 
+- (void)showSortView {
+    self.searchView.arrowUp = YES;
+    [self.sortView refreshUI:self.statusChooseIndex subjectId:self.subjectChooseIndex];
+    [self.sortView showInView:[NSObject getKeyWindow]];
+}
+
 - (void)evaluateSource:(NSString *)searchKey {
     self.searchKey = searchKey;
     [self refreshAndRequestData];
@@ -288,6 +302,51 @@
     }
     return isExistenceNetwork;
 }
+
+- (MyCourseRankSortView *)sortView {
+    if (!_sortView) {
+        _sortView = [MyCourseRankSortView sharedInstance];
+        [_sortView configWithStatusArray:self.statusArray subjectArray:self.subjectList];
+        MJWeakSelf;
+        [_sortView sortActionCallback:^(MY_COURSE_SORTTYPE type, NSString * _Nullable status, NSString * _Nullable subjectId, NSInteger statusIndex, NSInteger subjectIndex) {
+            [weakSelf sortActionWithType:type status:status subjectId:subjectId statusChooseIndex:statusIndex subjectChooseIndex:subjectIndex];
+        }];
+    }
+    return _sortView;
+}
+
+- (void)sortActionWithType:(MY_COURSE_SORTTYPE)type status:(NSString *)status subjectId:(NSString *)subjectId statusChooseIndex:(NSInteger)statusChooseIndex subjectChooseIndex:(NSInteger)subjectChooseIndex  {
+    self.searchView.arrowUp = NO;
+    if (type == MY_COURSE_SORTTYPE_HIDE) {
+        self.searchView.arrowUp = NO;
+        if (type == MY_COURSE_SORTTYPE_SORT) {
+            self.statusChooseIndex = statusChooseIndex;
+            self.subjectChooseIndex = subjectChooseIndex;
+            self.status = status;
+            self.subjectId = subjectId;
+            if ([NSString isEmptyString:status]) {
+                self.status = nil;
+            }
+            if ([NSString isEmptyString:subjectId]) {
+                self.subjectId = nil;
+            }
+            [self refreshAndRequestData];
+        }
+    }
+}
+
+- (NSMutableArray *)statusArray {
+    if (!_statusArray) {
+        _statusArray = [NSMutableArray arrayWithArray:@[@{@"name":@"全部",@"id":@""},@{@"name":@"未开课",@"id":@"NOT_START"},@{@"name":@"已开课",@"id":@"ING"},@{@"name":@"已结课",@"id":@"COMPLETE"}]];
+    }
+    return _statusArray;
+}
+
+- (void)setSubjectList:(NSMutableArray *)subjectList {
+    NSMutableArray *array = [NSMutableArray arrayWithArray:subjectList];
+    [array insertObject:@{@"name":@"全部",@"id":@""} atIndex:0];
+    _subjectList = array;
+}
 /*
 // Only override drawRect: if you perform custom drawing.
 // An empty implementation adversely affects performance during animation.

+ 58 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Home/MyCourse/View/LiveCourseGroup/MyLiveCourseGroupView.m

@@ -12,6 +12,7 @@
 #import "Reachability.h"
 #import "LiveLessonModel.h"
 #import "KSBaseWKWebViewController.h"
+#import "MyCourseRankSortView.h"
 
 @interface MyLiveCourseGroupView ()<UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout>
 
@@ -35,6 +36,14 @@
 @property (nonatomic, strong) NSString *status;
 
 @property (nonatomic, strong) NSString *classDate;
+
+@property (nonatomic, assign) NSInteger subjectChooseIndex;
+
+@property (nonatomic, assign) NSInteger statusChooseIndex;
+
+@property (nonatomic, strong) MyCourseRankSortView *sortView;
+
+@property (nonatomic, strong) NSMutableArray *statusArray;
 @end
 
 
@@ -221,7 +230,7 @@
     switch (type) {
         case MY_COURSE_SORT_RANK:
         {
-            
+            [self showSortView];
         }
             break;
         case MY_COURSE_SORT_SEARCH:
@@ -234,6 +243,12 @@
     }
 }
 
+- (void)showSortView {
+    self.searchView.arrowUp = YES;
+    [self.sortView refreshUI:self.statusChooseIndex subjectId:self.subjectChooseIndex];
+    [self.sortView showInView:[NSObject getKeyWindow]];
+}
+
 - (void)evaluateSource:(NSString *)searchKey {
     self.searchKey = searchKey;
     [self refreshAndRequestData];
@@ -300,6 +315,48 @@
     }
     return isExistenceNetwork;
 }
+
+- (MyCourseRankSortView *)sortView {
+    if (!_sortView) {
+        _sortView = [MyCourseRankSortView sharedInstance];
+        [_sortView configWithStatusArray:self.statusArray subjectArray:self.subjectList];
+        MJWeakSelf;
+        [_sortView sortActionCallback:^(MY_COURSE_SORTTYPE type, NSString * _Nullable status, NSString * _Nullable subjectId, NSInteger statusIndex, NSInteger subjectIndex) {
+            [weakSelf sortActionWithType:type status:status subjectId:subjectId statusChooseIndex:statusIndex subjectChooseIndex:subjectIndex];
+        }];
+    }
+    return _sortView;
+}
+
+- (void)sortActionWithType:(MY_COURSE_SORTTYPE)type status:(NSString *)status subjectId:(NSString *)subjectId statusChooseIndex:(NSInteger)statusChooseIndex subjectChooseIndex:(NSInteger)subjectChooseIndex  {
+    self.searchView.arrowUp = NO;
+    if (type == MY_COURSE_SORTTYPE_SORT) {
+        self.statusChooseIndex = statusChooseIndex;
+        self.subjectChooseIndex = subjectChooseIndex;
+        self.status = status;
+        self.subjectId = subjectId;
+        if ([NSString isEmptyString:status]) {
+            self.status = nil;
+        }
+        if ([NSString isEmptyString:subjectId]) {
+            self.subjectId = nil;
+        }
+        [self refreshAndRequestData];
+    }
+}
+
+- (NSMutableArray *)statusArray {
+    if (!_statusArray) {
+        _statusArray = [NSMutableArray arrayWithArray:@[@{@"name":@"全部",@"id":@""},@{@"name":@"未开课",@"id":@"NOT_START"},@{@"name":@"已开课",@"id":@"ING"},@{@"name":@"已结课",@"id":@"COMPLETE"}]];
+    }
+    return _statusArray;
+}
+
+- (void)setSubjectList:(NSMutableArray *)subjectList {
+    NSMutableArray *array = [NSMutableArray arrayWithArray:subjectList];
+    [array insertObject:@{@"name":@"全部",@"id":@""} atIndex:0];
+    _subjectList = array;
+}
 /*
 // Only override drawRect: if you perform custom drawing.
 // An empty implementation adversely affects performance during animation.

+ 59 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Home/MyCourse/View/MusicRoomCourseGroup/MyMusicRoomCourseGroupView.m

@@ -11,6 +11,7 @@
 #import "StateView.h"
 #import "Reachability.h"
 #import "ProgramCourseGroupModel.h"
+#import "MyCourseRankSortView.h"
 
 @interface MyMusicRoomCourseGroupView ()<UITableViewDelegate,UITableViewDataSource>
 
@@ -33,6 +34,14 @@
 
 @property (nonatomic, strong) NSString *status;
 
+@property (nonatomic, assign) NSInteger subjectChooseIndex;
+
+@property (nonatomic, assign) NSInteger statusChooseIndex;
+
+@property (nonatomic, strong) MyCourseRankSortView *sortView;
+
+@property (nonatomic, strong) NSMutableArray *statusArray;
+
 @end
 
 @implementation MyMusicRoomCourseGroupView
@@ -206,7 +215,7 @@
     switch (type) {
         case MY_COURSE_SORT_RANK:
         {
-            
+            [self showSortView];
         }
             break;
         case MY_COURSE_SORT_SEARCH:
@@ -219,6 +228,13 @@
     }
 }
 
+- (void)showSortView {
+    self.searchView.arrowUp = YES;
+    [self.sortView refreshUI:self.statusChooseIndex subjectId:self.subjectChooseIndex];
+    [self.sortView showInView:[NSObject getKeyWindow]];
+}
+
+
 - (void)evaluateSource:(NSString *)searchKey {
     self.searchKey = searchKey;
     [self refreshAndRequestData];
@@ -285,6 +301,48 @@
     }
     return isExistenceNetwork;
 }
+
+- (MyCourseRankSortView *)sortView {
+    if (!_sortView) {
+        _sortView = [MyCourseRankSortView sharedInstance];
+        [_sortView configWithStatusArray:self.statusArray subjectArray:self.subjectList];
+        MJWeakSelf;
+        [_sortView sortActionCallback:^(MY_COURSE_SORTTYPE type, NSString * _Nullable status, NSString * _Nullable subjectId, NSInteger statusIndex, NSInteger subjectIndex) {
+            [weakSelf sortActionWithType:type status:status subjectId:subjectId statusChooseIndex:statusIndex subjectChooseIndex:subjectIndex];
+        }];
+    }
+    return _sortView;
+}
+
+- (void)sortActionWithType:(MY_COURSE_SORTTYPE)type status:(NSString *)status subjectId:(NSString *)subjectId statusChooseIndex:(NSInteger)statusChooseIndex subjectChooseIndex:(NSInteger)subjectChooseIndex  {
+    self.searchView.arrowUp = NO;
+    if (type == MY_COURSE_SORTTYPE_SORT) {
+        self.statusChooseIndex = statusChooseIndex;
+        self.subjectChooseIndex = subjectChooseIndex;
+        self.status = status;
+        self.subjectId = subjectId;
+        if ([NSString isEmptyString:status]) {
+            self.status = nil;
+        }
+        if ([NSString isEmptyString:subjectId]) {
+            self.subjectId = nil;
+        }
+        [self refreshAndRequestData];
+    }
+}
+
+- (NSMutableArray *)statusArray {
+    if (!_statusArray) {
+        _statusArray = [NSMutableArray arrayWithArray:@[@{@"name":@"全部",@"id":@""},@{@"name":@"未开课",@"id":@"NOT_START"},@{@"name":@"已开课",@"id":@"ING"},@{@"name":@"已结课",@"id":@"COMPLETE"}]];
+    }
+    return _statusArray;
+}
+
+- (void)setSubjectList:(NSMutableArray *)subjectList {
+    NSMutableArray *array = [NSMutableArray arrayWithArray:subjectList];
+    [array insertObject:@{@"name":@"全部",@"id":@""} atIndex:0];
+    _subjectList = array;
+}
 /*
 // Only override drawRect: if you perform custom drawing.
 // An empty implementation adversely affects performance during animation.

+ 33 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/MyCourse/View/MyCourseSortView/MyCourseRankSortView.h

@@ -0,0 +1,33 @@
+//
+//  MyCourseRankSortView.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2024/11/21.
+//
+
+#import <UIKit/UIKit.h>
+
+typedef NS_ENUM(NSInteger, MY_COURSE_SORTTYPE) {
+    MY_COURSE_SORTTYPE_HIDE,
+    MY_COURSE_SORTTYPE_SORT,
+};
+
+typedef void(^MyCourseSortTypeCallback)(MY_COURSE_SORTTYPE type, NSString * _Nullable status, NSString * _Nullable subjectId, NSInteger statusIndex, NSInteger subjectIndex);
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface MyCourseRankSortView : UIView
+
++ (instancetype)sharedInstance;
+
+- (void)configWithStatusArray:(NSMutableArray *)statusArray subjectArray:(NSMutableArray *)subjectArray;
+
+- (void)refreshUI:(NSInteger)statusIndex subjectId:(NSInteger)subjectIndex;
+
+- (void)sortActionCallback:(MyCourseSortTypeCallback)callback;
+
+- (void)showInView:(UIView *)displayView;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 338 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/MyCourse/View/MyCourseSortView/MyCourseRankSortView.m

@@ -0,0 +1,338 @@
+//
+//  MyCourseRankSortView.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2024/11/21.
+//
+
+#import "MyCourseRankSortView.h"
+#import "MyCourseSearchView.h"
+
+@interface MyCourseRankSortView ()<UIScrollViewDelegate,UIGestureRecognizerDelegate>
+
+@property (weak, nonatomic) IBOutlet NSLayoutConstraint *topSpace;
+
+@property (nonatomic, strong) UITapGestureRecognizer *tapGesture;
+
+@property (weak, nonatomic) IBOutlet UIView *containerView;
+
+@property (weak, nonatomic) IBOutlet UIView *sortButtonContainer;
+
+@property (weak, nonatomic) IBOutlet NSLayoutConstraint *sortContainerHeight;
+
+@property (nonatomic, copy) MyCourseSortTypeCallback callback;
+
+@property (nonatomic, strong) NSMutableArray *statusArray;
+
+@property (nonatomic, strong) NSMutableArray *subjectArray;
+
+@property (nonatomic, strong) UIScrollView *scrollView;
+
+@property (nonatomic, strong) NSString *status;
+
+@property (nonatomic, strong) NSString *subjectId;
+
+@property (nonatomic, assign) NSInteger statusChooseIndex; // 状态
+
+@property (nonatomic, assign) NSInteger subjectChooseIndex; // 声部id
+
+@end
+
+@implementation MyCourseRankSortView
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    self.containerView.layer.cornerRadius = 20.0f;
+    self.containerView.layer.maskedCorners = kCALayerMinXMaxYCorner | kCALayerMaxXMaxYCorner;
+    [self.sortButtonContainer addSubview:self.scrollView];
+    [self.scrollView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.mas_equalTo(self.sortButtonContainer);
+    }];
+    self.statusChooseIndex = 1000;
+    self.subjectChooseIndex = 2000;
+    self.tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction:)];
+    [self addGestureRecognizer:self.tapGesture];
+    self.tapGesture.delegate = self;
+    self.topSpace.constant = kNaviBarHeight + 44 + [MyCourseSearchView getViewHeight];
+}
+
+
++ (instancetype)sharedInstance {
+    MyCourseRankSortView *view = [[[NSBundle mainBundle] loadNibNamed:@"MyCourseRankSortView" owner:nil options:nil] firstObject];
+    return view;
+}
+
+- (void)configWithStatusArray:(NSMutableArray *)statusArray subjectArray:(NSMutableArray *)subjectArray {
+    self.statusArray = [statusArray mutableCopy];
+    self.subjectArray = [subjectArray mutableCopy];
+}
+
+- (void)refreshUI:(NSInteger)statusIndex subjectId:(NSInteger)subjectIndex {
+    self.statusChooseIndex = statusIndex;
+    self.subjectChooseIndex = subjectIndex;
+    
+    if (statusIndex == 0) {
+        self.statusChooseIndex = 1000;
+    }
+    if (subjectIndex == 0) {
+        self.subjectChooseIndex = 2000;
+    }
+    
+    [self configUI];
+}
+
+- (void)configUI {
+    [self.scrollView removeAllSubViews];
+    CGFloat topHeight = 0.0f;
+    
+    CGFloat midSpace = 9.0f;
+    CGFloat leftSpace = 14.0f;
+    CGFloat topSpace = 9.0f;
+    CGFloat buttonHeight = 32.0f;
+
+    // 添加课程状态数据
+    if (self.statusArray.count) {
+        topHeight += 24.0f;
+        UIView *statusLineView = [[UIView alloc] init];
+        [self.scrollView addSubview:statusLineView];
+        statusLineView.backgroundColor = THEMECOLOR;
+        statusLineView.layer.cornerRadius = 2.0f;
+        [statusLineView mas_makeConstraints:^(MASConstraintMaker *make) {
+            make.left.mas_equalTo(self.sortButtonContainer.mas_left).offset(16);
+            make.top.mas_equalTo(self.scrollView.mas_top).offset(topHeight);
+            make.width.mas_equalTo(4);
+            make.height.mas_equalTo(11);
+        }];
+        UILabel *statusLabel = [[UILabel alloc] initWithFrame:CGRectZero];
+        statusLabel.textColor = HexRGB(0x333333);
+        statusLabel.text = @"课程状态";
+        statusLabel.font = [UIFont systemFontOfSize:16.0f weight:UIFontWeightMedium];
+        [self.scrollView addSubview:statusLabel];
+        [statusLabel mas_makeConstraints:^(MASConstraintMaker *make) {
+            make.left.mas_equalTo(statusLineView.mas_right).offset(6);
+            make.height.mas_equalTo(22);
+            make.centerY.mas_equalTo(statusLineView.mas_centerY);
+        }];
+        topHeight += 16.0f;
+        
+        
+        CGFloat buttonWidth = (KPortraitWidth - leftSpace * 2 - midSpace * 3) / 4.0f;
+
+        for (NSInteger index = 0; index < self.statusArray.count; index++) {
+            CGFloat xSpace = leftSpace + (buttonWidth + midSpace) * (index % 4);
+            CGFloat ySpace = topSpace + (buttonHeight + topSpace) * (index / 4);
+            
+            NSDictionary *parm = self.statusArray[index];
+            NSString *title = [parm ks_stringValueForKey:@"name"];
+            UIButton *button = [self createButton:1000+index buttonTitle:title];
+            [self.scrollView addSubview:button];
+            if (self.statusChooseIndex == 1000 + index) {
+                [self modifyButtonStatus:YES buttonIndex:1000+index];
+                self.status = [parm ks_stringValueForKey:@"id"];
+            }
+            [button mas_makeConstraints:^(MASConstraintMaker *make) {
+                make.left.mas_equalTo(self.sortButtonContainer.mas_left).offset(xSpace);
+                make.width.mas_equalTo(buttonWidth);
+                make.height.mas_equalTo(buttonHeight);
+                make.top.mas_equalTo(statusLabel.mas_bottom).offset(ySpace);
+            }];
+            // 增加行高
+            if (index % 4 == 0) {
+                topHeight += (buttonHeight + topSpace);
+            }
+        }
+    }
+    
+    if (self.subjectArray) {
+        topHeight += 24.0;
+        UIView *lineView = [[UIView alloc] init];
+        [self.scrollView addSubview:lineView];
+        lineView.backgroundColor = THEMECOLOR;
+        lineView.layer.cornerRadius = 2.0f;
+        [lineView mas_makeConstraints:^(MASConstraintMaker *make) {
+            make.left.mas_equalTo(self.sortButtonContainer.mas_left).offset(16);
+            make.top.mas_equalTo(self.scrollView.mas_top).offset(topHeight);
+            make.width.mas_equalTo(4);
+            make.height.mas_equalTo(11);
+        }];
+        UILabel *subjectLabel = [[UILabel alloc] initWithFrame:CGRectZero];
+        subjectLabel.textColor = HexRGB(0x333333);
+        subjectLabel.text = @"声部";
+        subjectLabel.font = [UIFont systemFontOfSize:16.0f weight:UIFontWeightMedium];
+        [self.scrollView addSubview:subjectLabel];
+        [subjectLabel mas_makeConstraints:^(MASConstraintMaker *make) {
+            make.left.mas_equalTo(lineView.mas_right).offset(6);
+            make.height.mas_equalTo(22);
+            make.centerY.mas_equalTo(lineView.mas_centerY);
+        }];
+        topHeight += 16.0f;
+        
+        CGFloat buttonWidth = (KPortraitWidth - leftSpace * 2 - midSpace * 2) / 3.0f;
+
+        for (NSInteger index = 0; index < self.subjectArray.count; index++) {
+            CGFloat xSpace = leftSpace + (buttonWidth + midSpace) * (index % 3);
+            CGFloat ySpace = topSpace + (buttonHeight + topSpace) * (index / 3);
+            
+            NSDictionary *parm = self.subjectArray[index];
+            NSString *title = [parm ks_stringValueForKey:@"name"];
+            UIButton *button = [self createButton:2000+index buttonTitle:title];
+            [self.scrollView addSubview:button];
+            if (self.subjectChooseIndex == 2000 + index) {
+                [self modifyButtonStatus:YES buttonIndex:2000+index];
+                self.subjectId = [parm ks_stringValueForKey:@"id"];
+            }
+            [button mas_makeConstraints:^(MASConstraintMaker *make) {
+                make.left.mas_equalTo(self.sortButtonContainer.mas_left).offset(xSpace);
+                make.width.mas_equalTo(buttonWidth);
+                make.height.mas_equalTo(buttonHeight);
+                make.top.mas_equalTo(subjectLabel.mas_bottom).offset(ySpace);
+            }];
+            // 增加行高
+            if (index % 3 == 0) {
+                topHeight += (buttonHeight + topSpace);
+            }
+        }
+        topHeight += 18; // 底部区域
+    }
+    if (topHeight > 303) {
+        topHeight = 303.0f;
+    }
+    self.sortContainerHeight.constant = topHeight;
+}
+
+- (void)sortActionCallback:(MyCourseSortTypeCallback)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+}
+
+
+- (void)showInView:(UIView *)displayView {
+    if (![displayView.subviews containsObject:self]) {
+        [displayView addSubview:self];
+        [self mas_makeConstraints:^(MASConstraintMaker *make) {
+            make.left.right.top.bottom.mas_equalTo(displayView);
+        }];
+    }
+}
+
+- (void)resetAllChoose {
+    if (self.statusChooseIndex != 0) {
+        [self modifyButtonStatus:NO buttonIndex:self.statusChooseIndex];
+        self.statusChooseIndex = 1000;
+        [self modifyButtonStatus:YES buttonIndex:self.statusChooseIndex];
+    }
+    
+    if (self.subjectChooseIndex != 0) {
+        [self modifyButtonStatus:NO buttonIndex:self.subjectChooseIndex];
+        self.subjectChooseIndex = 2000;
+        [self modifyButtonStatus:YES buttonIndex:self.subjectChooseIndex];
+    }
+    self.status = nil;
+    self.subjectId = nil;
+}
+
+- (void)hideView {
+    [self removeFromSuperview];
+}
+
+- (void)tapAction:(id)sender {
+    [self hideView];
+    if (self.callback) {
+        self.callback(MY_COURSE_SORTTYPE_HIDE, self.status, self.subjectId,self.statusChooseIndex , self.subjectChooseIndex);
+    }
+}
+
+- (IBAction)resetAction:(id)sender {
+    [self resetAllChoose];
+}
+
+- (IBAction)sureAction:(id)sender {
+    [self hideView];
+    if (self.callback) {
+        self.callback(MY_COURSE_SORTTYPE_SORT, self.status, self.subjectId, self.statusChooseIndex, self.subjectChooseIndex);
+    }
+}
+
+
+#pragma mark ----- lazying
+- (UIScrollView *)scrollView {
+    if (!_scrollView) {
+        _scrollView = [[UIScrollView alloc] init];
+        _scrollView.delegate = self;
+        _scrollView.pagingEnabled = YES;
+        _scrollView.bounces = NO;
+        _scrollView.backgroundColor = [UIColor clearColor];
+        _scrollView.showsHorizontalScrollIndicator = NO;
+        _scrollView.showsVerticalScrollIndicator = NO;
+    }
+    return _scrollView;
+}
+
+- (UIButton *)createButton:(NSInteger)tag buttonTitle:(NSString *)buttonTitle {
+    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
+    button.tag = tag;
+    button.titleEdgeInsets = UIEdgeInsetsMake(0, 5, 0, 5);
+    [button setTitle:buttonTitle forState:UIControlStateNormal];
+    [button.titleLabel setFont:[UIFont systemFontOfSize:12.0f weight:UIFontWeightRegular]];
+    button.titleLabel.lineBreakMode = NSLineBreakByTruncatingMiddle;
+    [button setTitleColor:HexRGB(0x999999) forState:UIControlStateNormal];
+    [button addTarget:self action:@selector(buttonClickAction:) forControlEvents:UIControlEventTouchUpInside];
+    button.layer.cornerRadius =  4.0f;
+    button.backgroundColor = HexRGB(0xF8F8F8);
+    button.layer.borderWidth = 1.0f;
+    button.layer.borderColor = [UIColor clearColor].CGColor;
+    return button;
+}
+
+- (void)buttonClickAction:(UIButton *)sender {
+    if (sender.tag >= 1000 && sender.tag < 2000) { // 状态
+        
+        if (self.statusChooseIndex != sender.tag) {
+            [self modifyButtonStatus:NO buttonIndex:self.statusChooseIndex];
+            [self modifyButtonStatus:YES buttonIndex:sender.tag];
+            self.statusChooseIndex = sender.tag;
+            NSDictionary *parm = self.statusArray[self.statusChooseIndex-1000];
+            self.status = [parm ks_stringValueForKey:@"id"];
+        }
+    }
+    else if (sender.tag >= 2000 && sender.tag < 3000) { // 声部
+        if (self.subjectChooseIndex != sender.tag) {
+            [self modifyButtonStatus:NO buttonIndex:self.subjectChooseIndex];
+            [self modifyButtonStatus:YES buttonIndex:sender.tag];
+            self.subjectChooseIndex = sender.tag;
+            NSDictionary *parm = self.subjectArray[self.subjectChooseIndex-2000];
+            self.subjectId = [parm ks_stringValueForKey:@"id"];
+        }
+    }
+}
+
+- (void)modifyButtonStatus:(BOOL)isChoose buttonIndex:(NSInteger)buttonIndex {
+    UIButton *button = (UIButton *)[self.scrollView viewWithTag:buttonIndex];
+    if (isChoose) {
+        [button setBackgroundColor:HexRGB(0xE9FFF8)];
+        [button setTitleColor:HexRGB(0x2DC7AA) forState:UIControlStateNormal];
+        button.layer.borderColor = HexRGB(0x2DC7AA).CGColor;
+    }
+    else {
+        [button setBackgroundColor:HexRGB(0xF8F8F8)];
+        [button setTitleColor:HexRGB(0x999999) forState:UIControlStateNormal];
+        button.layer.borderColor = [UIColor clearColor].CGColor;
+    }
+}
+
+- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
+    if ([touch.view isDescendantOfView:self.containerView]) {
+        return NO;
+    }
+    return YES;
+}
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 140 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/MyCourse/View/MyCourseSortView/MyCourseRankSortView.xib

@@ -0,0 +1,140 @@
+<?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="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="MyCourseRankSortView">
+            <rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <subviews>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="4cU-Yc-xQ4">
+                    <rect key="frame" x="0.0" y="522" width="393" height="330"/>
+                    <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
+                </view>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="DGd-qK-ni7">
+                    <rect key="frame" x="0.0" y="160" width="393" height="382"/>
+                    <subviews>
+                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Ezp-zR-evZ">
+                            <rect key="frame" x="0.0" y="300" width="393" height="82"/>
+                            <subviews>
+                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Gfc-W3-txU">
+                                    <rect key="frame" x="0.0" y="0.0" width="393" height="1"/>
+                                    <color key="backgroundColor" red="0.94901960784313721" green="0.94901960784313721" blue="0.94901960784313721" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                    <constraints>
+                                        <constraint firstAttribute="height" constant="1" id="kav-ju-hw2"/>
+                                    </constraints>
+                                </view>
+                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Z2o-te-Oi9">
+                                    <rect key="frame" x="13" y="21" width="176" height="44"/>
+                                    <constraints>
+                                        <constraint firstAttribute="height" constant="44" id="amB-tc-E8X"/>
+                                    </constraints>
+                                    <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                    <state key="normal" title="重置">
+                                        <color key="titleColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                    </state>
+                                    <userDefinedRuntimeAttributes>
+                                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                            <real key="value" value="22"/>
+                                        </userDefinedRuntimeAttribute>
+                                        <userDefinedRuntimeAttribute type="number" keyPath="borderWidth">
+                                            <real key="value" value="1"/>
+                                        </userDefinedRuntimeAttribute>
+                                        <userDefinedRuntimeAttribute type="color" keyPath="borderColor">
+                                            <color key="value" red="0.85882352941176465" green="0.85882352941176465" blue="0.85882352941176465" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                        </userDefinedRuntimeAttribute>
+                                    </userDefinedRuntimeAttributes>
+                                    <connections>
+                                        <action selector="resetAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="RCf-7h-QJ1"/>
+                                    </connections>
+                                </button>
+                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="b8q-UA-MQi">
+                                    <rect key="frame" x="204" y="21" width="176" height="44"/>
+                                    <color key="backgroundColor" red="0.1764705882352941" green="0.7803921568627451" blue="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
+                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                    <state key="normal" title="确认"/>
+                                    <userDefinedRuntimeAttributes>
+                                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                            <real key="value" value="22"/>
+                                        </userDefinedRuntimeAttribute>
+                                    </userDefinedRuntimeAttributes>
+                                    <connections>
+                                        <action selector="sureAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="yOG-yx-r2y"/>
+                                    </connections>
+                                </button>
+                            </subviews>
+                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            <constraints>
+                                <constraint firstItem="b8q-UA-MQi" firstAttribute="centerY" secondItem="Z2o-te-Oi9" secondAttribute="centerY" id="3xH-Gk-irg"/>
+                                <constraint firstAttribute="trailing" secondItem="Gfc-W3-txU" secondAttribute="trailing" id="9sB-nY-Cyp"/>
+                                <constraint firstItem="b8q-UA-MQi" firstAttribute="leading" secondItem="Z2o-te-Oi9" secondAttribute="trailing" constant="15" id="K0h-tS-FfS"/>
+                                <constraint firstAttribute="trailing" secondItem="b8q-UA-MQi" secondAttribute="trailing" constant="13" id="KgJ-A0-cG3"/>
+                                <constraint firstAttribute="height" constant="82" id="LQe-1g-eN8"/>
+                                <constraint firstItem="b8q-UA-MQi" firstAttribute="width" secondItem="Z2o-te-Oi9" secondAttribute="width" id="MYf-N3-2qm"/>
+                                <constraint firstItem="Z2o-te-Oi9" firstAttribute="top" secondItem="Gfc-W3-txU" secondAttribute="bottom" constant="20" id="XE5-Af-9Ni"/>
+                                <constraint firstItem="Gfc-W3-txU" firstAttribute="leading" secondItem="Ezp-zR-evZ" secondAttribute="leading" id="Xtd-Gh-kcD"/>
+                                <constraint firstItem="b8q-UA-MQi" firstAttribute="height" secondItem="Z2o-te-Oi9" secondAttribute="height" id="dxj-Gn-BGe"/>
+                                <constraint firstItem="Gfc-W3-txU" firstAttribute="top" secondItem="Ezp-zR-evZ" secondAttribute="top" id="ocy-qs-mM1"/>
+                                <constraint firstItem="Z2o-te-Oi9" firstAttribute="leading" secondItem="Ezp-zR-evZ" secondAttribute="leading" constant="13" id="qf4-7T-0hy"/>
+                            </constraints>
+                        </view>
+                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="CQx-oG-dvA">
+                            <rect key="frame" x="0.0" y="0.0" width="393" height="300"/>
+                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="300" id="NHL-TK-Rov"/>
+                            </constraints>
+                        </view>
+                    </subviews>
+                    <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <constraints>
+                        <constraint firstItem="CQx-oG-dvA" firstAttribute="top" secondItem="DGd-qK-ni7" secondAttribute="top" id="Aee-Ts-MVR"/>
+                        <constraint firstAttribute="trailing" secondItem="CQx-oG-dvA" secondAttribute="trailing" id="Bth-fi-V6m"/>
+                        <constraint firstItem="Ezp-zR-evZ" firstAttribute="leading" secondItem="DGd-qK-ni7" secondAttribute="leading" id="DUq-NZ-ChI"/>
+                        <constraint firstItem="Ezp-zR-evZ" firstAttribute="top" secondItem="CQx-oG-dvA" secondAttribute="bottom" id="QVM-Ba-8bF"/>
+                        <constraint firstAttribute="trailing" secondItem="Ezp-zR-evZ" secondAttribute="trailing" id="bP8-cu-2Hz"/>
+                        <constraint firstItem="CQx-oG-dvA" firstAttribute="leading" secondItem="DGd-qK-ni7" secondAttribute="leading" id="kg1-iX-KVu"/>
+                        <constraint firstAttribute="bottom" secondItem="Ezp-zR-evZ" secondAttribute="bottom" id="wIc-Xn-BZK"/>
+                    </constraints>
+                </view>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="6Rs-lR-WaE">
+                    <rect key="frame" x="0.0" y="0.0" width="393" height="160"/>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                </view>
+            </subviews>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <gestureRecognizers/>
+            <constraints>
+                <constraint firstItem="4cU-Yc-xQ4" firstAttribute="top" secondItem="DGd-qK-ni7" secondAttribute="bottom" constant="-20" id="4Kb-cW-aHR"/>
+                <constraint firstItem="DGd-qK-ni7" firstAttribute="top" secondItem="6Rs-lR-WaE" secondAttribute="bottom" id="DWI-00-zj1"/>
+                <constraint firstItem="DGd-qK-ni7" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="160" id="NpJ-u5-lsV"/>
+                <constraint firstItem="6Rs-lR-WaE" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="Rni-Wj-EsN"/>
+                <constraint firstItem="6Rs-lR-WaE" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="U5Z-Uc-OBk"/>
+                <constraint firstAttribute="trailing" secondItem="4cU-Yc-xQ4" secondAttribute="trailing" id="V4i-GC-Wj7"/>
+                <constraint firstItem="DGd-qK-ni7" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="ZgY-iI-Snw"/>
+                <constraint firstItem="4cU-Yc-xQ4" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="dhL-w1-pO7"/>
+                <constraint firstAttribute="bottom" secondItem="4cU-Yc-xQ4" secondAttribute="bottom" id="f8A-Ad-0em"/>
+                <constraint firstAttribute="trailing" secondItem="DGd-qK-ni7" secondAttribute="trailing" id="pEx-p2-NcO"/>
+                <constraint firstAttribute="trailing" secondItem="6Rs-lR-WaE" secondAttribute="trailing" id="zXR-UA-adp"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="containerView" destination="DGd-qK-ni7" id="F7R-ow-4Bo"/>
+                <outlet property="sortButtonContainer" destination="CQx-oG-dvA" id="L3n-Ji-hyF"/>
+                <outlet property="sortContainerHeight" destination="NHL-TK-Rov" id="rt2-f1-5lr"/>
+                <outlet property="topSpace" destination="NpJ-u5-lsV" id="MIZ-Qu-0iP"/>
+            </connections>
+            <point key="canvasLocation" x="41.984732824427482" y="19.718309859154932"/>
+        </view>
+    </objects>
+</document>

+ 15 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/MyCourse/View/MyCourseSortView/MyCourseSearchView.m

@@ -9,6 +9,9 @@
 
 @interface MyCourseSearchView ()<UITextFieldDelegate>
 
+@property (weak, nonatomic) IBOutlet UILabel *sortLabel;
+@property (weak, nonatomic) IBOutlet UIImageView *sortImage;
+
 @property (weak, nonatomic) IBOutlet UITextField *searchField;
 
 @property (nonatomic, copy) MyCourseSortCallback callback;
@@ -51,6 +54,18 @@
     return YES;
 }
 
+- (void)setArrowUp:(BOOL)arrowUp {
+    _arrowUp = arrowUp;
+    if (arrowUp) {
+        self.sortLabel.textColor = THEMECOLOR;
+        [self.sortImage setImage:[UIImage imageNamed:@"sort_up_blue"]];
+    }
+    else {
+        self.sortLabel.textColor = HexRGB(0x131415);
+        [self.sortImage setImage:[UIImage imageNamed:@"sort_down_grey"]];
+    }
+}
+
 + (CGFloat)getViewHeight {
     return 58.0f;
 }

+ 4 - 2
KulexiuForTeacher/KulexiuForTeacher/Module/Home/MyCourse/View/MyCourseSortView/MyCourseSearchView.xib

@@ -22,7 +22,7 @@
                             <color key="textColor" red="0.074509803920000006" green="0.078431372550000003" blue="0.08235294118" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                             <nil key="highlightedColor"/>
                         </label>
-                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="sort_up_grey" translatesAutoresizingMaskIntoConstraints="NO" id="aG3-fG-AR8">
+                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="sort_down_grey" translatesAutoresizingMaskIntoConstraints="NO" id="aG3-fG-AR8">
                             <rect key="frame" x="32" y="14.666666666666668" width="9" height="5"/>
                             <constraints>
                                 <constraint firstAttribute="width" constant="9" id="VIv-ab-N47"/>
@@ -118,12 +118,14 @@
             <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
             <connections>
                 <outlet property="searchField" destination="ZbY-Gz-MYd" id="uG1-ld-TiF"/>
+                <outlet property="sortImage" destination="aG3-fG-AR8" id="bUY-wz-BrN"/>
+                <outlet property="sortLabel" destination="JbG-oJ-9Y1" id="cIx-83-hut"/>
             </connections>
             <point key="canvasLocation" x="32.824427480916029" y="-2.1126760563380285"/>
         </view>
     </objects>
     <resources>
         <image name="search_green" width="16" height="16"/>
-        <image name="sort_up_grey" width="9" height="5"/>
+        <image name="sort_down_grey" width="9" height="5"/>
     </resources>
 </document>

+ 59 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Home/MyCourse/View/VIPCourseGroup/MyVipCourseGroupView.m

@@ -11,6 +11,7 @@
 #import "StateView.h"
 #import "Reachability.h"
 #import "ProgramCourseGroupModel.h"
+#import "MyCourseRankSortView.h"
 
 @interface MyVipCourseGroupView ()<UITableViewDelegate,UITableViewDataSource>
 
@@ -31,8 +32,16 @@
 
 @property (nonatomic, strong) NSString *subjectId;
 
+@property (nonatomic, assign) NSInteger subjectChooseIndex;
+
 @property (nonatomic, strong) NSString *status;
 
+@property (nonatomic, assign) NSInteger statusChooseIndex;
+@property (nonatomic, strong) MyCourseRankSortView *sortView;
+
+@property (nonatomic, strong) NSMutableArray *statusArray;
+
+
 @end
 
 @implementation MyVipCourseGroupView
@@ -208,7 +217,7 @@
     switch (type) {
         case MY_COURSE_SORT_RANK:
         {
-            
+            [self showSortView];
         }
             break;
         case MY_COURSE_SORT_SEARCH:
@@ -221,6 +230,12 @@
     }
 }
 
+- (void)showSortView {
+    self.searchView.arrowUp = YES;
+    [self.sortView refreshUI:self.statusChooseIndex subjectId:self.subjectChooseIndex];
+    [self.sortView showInView:[NSObject getKeyWindow]];
+}
+
 - (void)evaluateSource:(NSString *)searchKey {
     self.searchKey = searchKey;
     [self refreshAndRequestData];
@@ -287,6 +302,49 @@
     }
     return isExistenceNetwork;
 }
+
+
+- (MyCourseRankSortView *)sortView {
+    if (!_sortView) {
+        _sortView = [MyCourseRankSortView sharedInstance];
+        [_sortView configWithStatusArray:self.statusArray subjectArray:self.subjectList];
+        MJWeakSelf;
+        [_sortView sortActionCallback:^(MY_COURSE_SORTTYPE type, NSString * _Nullable status, NSString * _Nullable subjectId, NSInteger statusIndex, NSInteger subjectIndex) {
+            [weakSelf sortActionWithType:type status:status subjectId:subjectId statusChooseIndex:statusIndex subjectChooseIndex:subjectIndex];
+        }];
+    }
+    return _sortView;
+}
+
+- (void)sortActionWithType:(MY_COURSE_SORTTYPE)type status:(NSString *)status subjectId:(NSString *)subjectId statusChooseIndex:(NSInteger)statusChooseIndex subjectChooseIndex:(NSInteger)subjectChooseIndex  {
+    self.searchView.arrowUp = NO;
+    if (type == MY_COURSE_SORTTYPE_SORT) {
+        self.statusChooseIndex = statusChooseIndex;
+        self.subjectChooseIndex = subjectChooseIndex;
+        self.status = status;
+        self.subjectId = subjectId;
+        if ([NSString isEmptyString:status]) {
+            self.status = nil;
+        }
+        if ([NSString isEmptyString:subjectId]) {
+            self.subjectId = nil;
+        }
+        [self refreshAndRequestData];
+    }
+}
+
+- (NSMutableArray *)statusArray {
+    if (!_statusArray) {
+        _statusArray = [NSMutableArray arrayWithArray:@[@{@"name":@"全部",@"id":@""},@{@"name":@"未开课",@"id":@"NOT_START"},@{@"name":@"已开课",@"id":@"ING"},@{@"name":@"已结课",@"id":@"COMPLETE"}]];
+    }
+    return _statusArray;
+}
+
+- (void)setSubjectList:(NSMutableArray *)subjectList {
+    NSMutableArray *array = [NSMutableArray arrayWithArray:subjectList];
+    [array insertObject:@{@"name":@"全部",@"id":@""} atIndex:0];
+    _subjectList = array;
+}
 /*
 // Only override drawRect: if you perform custom drawing.
 // An empty implementation adversely affects performance during animation.

+ 43 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Home/MyCourse/View/VideoCourseGroup/MyVideoCourseGroupView.m

@@ -12,6 +12,7 @@
 #import "StateView.h"
 #import "Reachability.h"
 #import "KSBaseWKWebViewController.h"
+#import "MyCourseRankSortView.h"
 
 @interface MyVideoCourseGroupView ()<UITableViewDelegate,UITableViewDataSource>
 
@@ -34,6 +35,10 @@
 
 @property (nonatomic, strong) NSString *audioStatus;
 
+@property (nonatomic, assign) NSInteger subjectChooseIndex;
+
+@property (nonatomic, strong) MyCourseRankSortView *sortView;
+
 @end
 
 @implementation MyVideoCourseGroupView
@@ -214,7 +219,7 @@
     switch (type) {
         case MY_COURSE_SORT_RANK:
         {
-            
+            [self showSortView];
         }
             break;
         case MY_COURSE_SORT_SEARCH:
@@ -227,6 +232,12 @@
     }
 }
 
+- (void)showSortView {
+    self.searchView.arrowUp = YES;
+    [self.sortView refreshUI:0 subjectId:self.subjectChooseIndex];
+    [self.sortView showInView:[NSObject getKeyWindow]];
+}
+
 - (void)evaluateSource:(NSString *)searchKey {
     self.searchKey = searchKey;
     [self refreshAndRequestData];
@@ -293,6 +304,37 @@
     }
     return isExistenceNetwork;
 }
+
+- (MyCourseRankSortView *)sortView {
+    if (!_sortView) {
+        _sortView = [MyCourseRankSortView sharedInstance];
+        [_sortView configWithStatusArray:[NSMutableArray array] subjectArray:self.subjectList];
+        MJWeakSelf;
+        [_sortView sortActionCallback:^(MY_COURSE_SORTTYPE type, NSString * _Nullable status, NSString * _Nullable subjectId, NSInteger statusIndex, NSInteger subjectIndex) {
+            [weakSelf sortActionWithType:type status:status subjectId:subjectId statusChooseIndex:statusIndex subjectChooseIndex:subjectIndex];
+        }];
+    }
+    return _sortView;
+}
+
+- (void)sortActionWithType:(MY_COURSE_SORTTYPE)type status:(NSString *)status subjectId:(NSString *)subjectId statusChooseIndex:(NSInteger)statusChooseIndex subjectChooseIndex:(NSInteger)subjectChooseIndex  {
+    self.searchView.arrowUp = NO;
+    if (type == MY_COURSE_SORTTYPE_SORT) {
+        self.subjectChooseIndex = subjectChooseIndex;
+        self.subjectId = subjectId;
+
+        if ([NSString isEmptyString:subjectId]) {
+            self.subjectId = nil;
+        }
+        [self refreshAndRequestData];
+    }
+}
+
+- (void)setSubjectList:(NSMutableArray *)subjectList {
+    NSMutableArray *array = [NSMutableArray arrayWithArray:subjectList];
+    [array insertObject:@{@"name":@"全部",@"id":@""} atIndex:0];
+    _subjectList = array;
+}
 /*
 // Only override drawRect: if you perform custom drawing.
 // An empty implementation adversely affects performance during animation.

+ 1 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Feedback/View/FeedbackListNavView.m

@@ -57,7 +57,7 @@
     }
     else {
         self.sortLabel.textColor = HexRGB(0x333333);
-        [self.arrowImage setImage:[UIImage imageNamed:@"sort_up_grey"]];
+        [self.arrowImage setImage:[UIImage imageNamed:@"sort_down_grey"]];
     }
 }
 /*

+ 6 - 6
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Feedback/View/FeedbackListNavView.xib

@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="22155" 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_12" orientation="portrait" appearance="light"/>
     <dependencies>
         <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22131"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23506"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
@@ -40,19 +40,19 @@
                             <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="fmd-vA-gcd">
-                            <rect key="frame" x="339.33333333333331" y="13.666666666666664" width="28.666666666666686" height="17"/>
+                            <rect key="frame" x="340" y="13.666666666666664" width="28" height="17"/>
                             <fontDescription key="fontDescription" type="system" pointSize="14"/>
                             <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="calibratedRGB"/>
                             <nil key="highlightedColor"/>
                         </label>
                         <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="iQI-gt-pbi">
-                            <rect key="frame" x="339.33333333333331" y="0.0" width="53.666666666666686" height="44"/>
+                            <rect key="frame" x="340" y="0.0" width="53" height="44"/>
                             <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                             <connections>
                                 <action selector="sortAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="frh-cm-nNf"/>
                             </connections>
                         </button>
-                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="sort_up_grey" translatesAutoresizingMaskIntoConstraints="NO" id="2vX-UI-bnk">
+                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="sort_down_grey" translatesAutoresizingMaskIntoConstraints="NO" id="2vX-UI-bnk">
                             <rect key="frame" x="372" y="19.666666666666671" width="9" height="5"/>
                         </imageView>
                     </subviews>
@@ -95,6 +95,6 @@
     </objects>
     <resources>
         <image name="back_black" width="12" height="20"/>
-        <image name="sort_up_grey" width="9" height="5"/>
+        <image name="sort_down_grey" width="9" height="5"/>
     </resources>
 </document>

+ 8 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/Controller/MinePageViewController.m

@@ -223,7 +223,14 @@
 }
 
 - (NSUInteger)tableHeaderViewHeightInPagerView:(JXPagerView *)pagerView {
-    NSUInteger topHeight = (NSUInteger)[self.topView getViewHeight:self.teacherInfo];
+    NSUInteger topHeight = 0.0f;
+    if (!self.teacherInfo) {
+        topHeight = 131 + 14 + 64;
+    }
+    else {
+        topHeight = (NSUInteger)[self.topView getViewHeight:self.teacherInfo];
+    }
+    
     return topHeight;
 }
 

+ 7 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/Controller/MineVipProgramViewController.m

@@ -128,7 +128,7 @@
 }
 
 - (void)configDefaultValue {
-    self.minPrice = 200.0f;
+    self.minPrice = 100.0f;
     self.maxPrice = 500.0f;
     self.timeArray = [NSMutableArray arrayWithArray:@[@"25"]];
 }
@@ -180,6 +180,12 @@
 }
 
 - (void)submitProgramWithSubjectId:(NSString *)subjectId subjectName:(NSString *)subjectName duration:(NSString *)duration price:(NSString *)price {
+    double priceNum = [price doubleValue];
+    if (priceNum > self.maxPrice || priceNum < self.minPrice) {
+        NSString *tipsDesc = [NSString stringWithFormat:@"课时单价需在%zd~%zd元内",self.minPrice, self.maxPrice];
+        [LOADING_MANAGER MBShowAUTOHidingInWindow:tipsDesc];
+    }
+    
     [LOADING_MANAGER showHUD];
     [KSNetworkingManager teacherSubjectPriceSaveRequest:KS_POST courseType:@"VIP" subjectName:subjectName subjectId:subjectId subjectPrice:price courseMinutes:duration success:^(NSDictionary * _Nonnull dic) {
         [LOADING_MANAGER removeHUDNoDelay];

+ 6 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/AccompanyCourse/MinePageAccompanyCourseView.m

@@ -12,6 +12,8 @@
 #import "KSBaseWKWebViewController.h"
 #import "KSConfirmAlertView.h"
 
+#define HIDE_ACCOMPANYTIPS (@"HIDE_ACCOMPANYTIPS")
+
 @interface MinePageAccompanyCourseView ()<UITableViewDelegate,UITableViewDataSource>
 
 @property (nonatomic, assign) BOOL isLoadMore;
@@ -71,6 +73,9 @@
                 [weakSelf.tableView.mj_footer endRefreshingWithNoMoreData];
             }
         }];
+        if (UserDefaultBoolForKey(HIDE_ACCOMPANYTIPS)) {
+            self.hideTips = YES;
+        }
     }
     return self;
 }
@@ -253,6 +258,7 @@
             break;
         case COURSE_TIPS_ACTION_STOPREMIND:
         {
+            UserDefaultSetBoolForKey(YES, HIDE_ACCOMPANYTIPS);
             self.hideTips = YES;
             [self setNeedsLayout];
         }

+ 1 - 3
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/HeadView/MinePageTopView.m

@@ -177,9 +177,7 @@
             NSMutableParagraphStyle *paragraphStyle = [self getParagraphStyleWithFont:[UIFont systemFontOfSize:13.0f] lineHeight:22.0f];
             CGFloat baselineOffset = [self getBaseOffline:[UIFont systemFontOfSize:13.0f] lineHeight:22.0f];
             CGFloat lableHeight = [introduce boundingRectWithSize:CGSizeMake(KPortraitWidth - 24 * 2, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSParagraphStyleAttributeName:paragraphStyle, NSBaselineOffsetAttributeName:@(baselineOffset),NSFontAttributeName:[UIFont systemFontOfSize:13.0f]} context:nil].size.height + 1;
-//            if (lableHeight < MIN_DESC_HEIGHT) {
-//                lableHeight = MIN_DESC_HEIGHT;
-//            }
+
             return 131 + 14 + 64 + lableHeight + 18;
         }
     }

+ 5 - 5
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/HeadView/MinePageTopView.xib

@@ -10,11 +10,11 @@
         <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
         <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
         <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="MinePageTopView">
-            <rect key="frame" x="0.0" y="0.0" width="374" height="314"/>
+            <rect key="frame" x="0.0" y="0.0" width="374" height="250"/>
             <autoresizingMask key="autoresizingMask"/>
             <subviews>
                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="w1f-9h-A4M">
-                    <rect key="frame" x="0.0" y="14" width="374" height="300"/>
+                    <rect key="frame" x="0.0" y="14" width="374" height="236"/>
                     <subviews>
                         <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="mine_instrument_logo" translatesAutoresizingMaskIntoConstraints="NO" id="IsQ-zh-7a5">
                             <rect key="frame" x="14" y="94" width="44" height="16"/>
@@ -92,7 +92,7 @@
                             <nil key="highlightedColor"/>
                         </label>
                         <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="4Jq-VA-6uM">
-                            <rect key="frame" x="0.0" y="131" width="374" height="169"/>
+                            <rect key="frame" x="0.0" y="131" width="374" height="105"/>
                             <subviews>
                                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="USe-oC-N7T">
                                     <rect key="frame" x="14" y="14" width="167.5" height="36"/>
@@ -196,7 +196,7 @@
                                     </constraints>
                                 </view>
                                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="jcb-v4-GpB">
-                                    <rect key="frame" x="12" y="64" width="350" height="105"/>
+                                    <rect key="frame" x="12" y="64" width="350" height="41"/>
                                     <subviews>
                                         <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="PZD-oz-8cA">
                                             <rect key="frame" x="12" y="9" width="326" height="0.0"/>
@@ -336,7 +336,7 @@
                 <outlet property="userAvatar" destination="3JZ-4N-xLY" id="bQ4-YD-XNr"/>
                 <outlet property="viperImage" destination="O4w-5f-Puh" id="deL-wn-pHv"/>
             </connections>
-            <point key="canvasLocation" x="100.00000000000001" y="60.267857142857139"/>
+            <point key="canvasLocation" x="100.00000000000001" y="38.839285714285715"/>
         </view>
         <tapGestureRecognizer id="pU3-So-ynT"/>
     </objects>

+ 5 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageLiveCourse/MinePageLiveCourseView.m

@@ -15,6 +15,7 @@
 #import "KSBaseWKWebViewController.h"
 #import "AuthDisplayView.h"
 
+#define HIDE_LIVETIPS (@"HIDE_LIVETIPS")
 
 @interface MinePageLiveCourseView ()<UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout>
 @property (nonatomic, strong) NSMutableArray *dataArray;
@@ -72,6 +73,9 @@
                 [weakSelf.collectionView.mj_footer endRefreshingWithNoMoreData];
             }
         }];
+        if (UserDefaultBoolForKey(HIDE_LIVETIPS)) {
+            self.hideTips = YES;
+        }
     }
     return self;
 }
@@ -317,6 +321,7 @@
             break;
         case COURSE_TIPS_ACTION_STOPREMIND:
         {
+            UserDefaultSetBoolForKey(YES, HIDE_LIVETIPS);
             self.hideTips = YES;
             [self setNeedsLayout];
         }

+ 6 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MineVideoCourse/MinePageVideoCourseView.m

@@ -13,6 +13,8 @@
 #import "MinePageVideoGroupCell.h"
 #import "KSBaseWKWebViewController.h"
 
+#define HIDE_VIDEOTIPS (@"HIDE_VIDEOTIPS")
+
 @interface MinePageVideoCourseView ()<UITableViewDelegate,UITableViewDataSource>
 
 @property (nonatomic, assign) BOOL isLoadMore;
@@ -70,6 +72,9 @@
                 [weakSelf.tableView.mj_footer endRefreshingWithNoMoreData];
             }
         }];
+        if (UserDefaultBoolForKey(HIDE_VIDEOTIPS)) {
+            self.hideTips = YES;
+        }
     }
     return self;
 }
@@ -285,6 +290,7 @@
             break;
         case COURSE_TIPS_ACTION_STOPREMIND:
         {
+            UserDefaultSetBoolForKey(YES, HIDE_VIDEOTIPS);
             self.hideTips = YES;
             [self setNeedsLayout];
         }

+ 10 - 10
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/VIPProgramCreate/MineVipProgramMainView.m

@@ -208,16 +208,16 @@
 
 #pragma mark ----- text field delegate
 - (void)textFieldDidEndEditing:(UITextField *)textField {
-    NSString *priceSetting = textField.text;
-    if (![NSString isEmptyString:priceSetting]) {
-        double priceNum = [priceSetting doubleValue];
-        if (priceNum > self.maxPrice) {
-            textField.text = [NSString stringWithFormat:@"%zd", self.maxPrice];
-        }
-        else if (priceNum < self.minPrice) {
-            textField.text = [NSString stringWithFormat:@"%zd", self.minPrice];
-        }
-    }
+//    NSString *priceSetting = textField.text;
+//    if (![NSString isEmptyString:priceSetting]) {
+//        double priceNum = [priceSetting doubleValue];
+//        if (priceNum > self.maxPrice) {
+//            textField.text = [NSString stringWithFormat:@"%zd", self.maxPrice];
+//        }
+//        else if (priceNum < self.minPrice) {
+//            textField.text = [NSString stringWithFormat:@"%zd", self.minPrice];
+//        }
+//    }
     self.price = textField.text;
     [self evaluatePriceWithMsg];
 }

+ 6 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/VipCourse/MinePageVIPCourseView.m

@@ -13,6 +13,8 @@
 #import "CoursePargramListModel.h"
 #import "KSConfirmAlertView.h"
 
+#define HIDE_VIPTIPS (@"HIDE_VIPTIPS")
+
 @interface MinePageVIPCourseView ()<UITableViewDelegate,UITableViewDataSource>
 
 @property (nonatomic, assign) BOOL isLoadMore;
@@ -62,6 +64,9 @@
             [weakSelf resetParamenter];
             [weakSelf requestData];
         }];
+        if (UserDefaultBoolForKey(HIDE_VIPTIPS)) {
+            self.hideTips = YES;
+        }
     }
     return self;
 }
@@ -298,6 +303,7 @@
             break;
         case COURSE_TIPS_ACTION_STOPREMIND:
         {
+            UserDefaultSetBoolForKey(YES, HIDE_VIPTIPS);
             self.hideTips = YES;
             [self setNeedsLayout];
         }