KSImageShareViewController.m 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. //
  2. // KSImageShareViewController.m
  3. // KulexiuForStudent
  4. //
  5. // Created by 王智 on 2022/9/21.
  6. //
  7. #import "KSImageShareViewController.h"
  8. #import "ChatAddressHeaderView.h"
  9. #import "JXCategoryView.h"
  10. #import "JXPagerListRefreshView.h"
  11. #import "ChatAddressBodyView.h"
  12. @interface KSImageShareViewController ()<JXPagerViewDelegate, JXPagerMainTableViewGestureDelegate,JXCategoryViewDelegate>
  13. @property (nonatomic, strong) ChatAddressHeaderView *headView;
  14. @property (nonatomic, assign) NSInteger selectedIndex;
  15. @property (nonatomic, strong) NSMutableArray *listViewArray;
  16. @property (nonatomic, copy) ShareGroupCallback callback;
  17. @end
  18. @implementation KSImageShareViewController
  19. - (void)backAction {
  20. if (self.callback) {
  21. self.callback(NO, @"已取消");
  22. }
  23. [self.navigationController popViewControllerAnimated:YES];
  24. }
  25. - (void)shareGroupCallback:(ShareGroupCallback)callback {
  26. if (callback) {
  27. self.callback = callback;
  28. }
  29. }
  30. - (void)viewDidLoad {
  31. [super viewDidLoad];
  32. // Do any additional setup after loading the view.
  33. _titles = @[@"班级",@"老师"];
  34. [self allocTitle:@"分享"];
  35. [self configUI];
  36. }
  37. - (void)configUI {
  38. [self.scrollView removeFromSuperview];
  39. self.view.backgroundColor = HexRGB(0xf6f8f9);
  40. [self.view addSubview:self.headView];
  41. self.headView.frame = CGRectMake(0, 0, kScreenWidth, 100);
  42. MJWeakSelf;
  43. [self.headView chatAddressbookAction:^(CHATADDRESSTYPE type, NSString * _Nullable searchKey) {
  44. [weakSelf topViewAction:type search:searchKey];
  45. }];
  46. _categoryView = [[JXCategoryTitleView alloc] initWithFrame:CGRectMake(0, 100, kScreenWidth, 10)];
  47. _categoryView.backgroundColor = HexRGB(0xf6f8f9);
  48. self.categoryView.titles = self.titles;
  49. self.categoryView.delegate = self;
  50. self.categoryView.titleFont = [UIFont systemFontOfSize:16.0f];
  51. self.categoryView.titleSelectedFont = [UIFont systemFontOfSize:16.0f weight:UIFontWeightMedium];
  52. self.categoryView.titleSelectedColor = THEMECOLOR;
  53. self.categoryView.titleColor = HexRGB(0x777777);
  54. self.categoryView.titleColorGradientEnabled = YES;
  55. self.categoryView.hidden = YES;
  56. _pagerView = [self preferredPagingView];
  57. self.pagerView.frame = CGRectMake(0, 100, kScreenWidth, kScreenHeight - kNaviBarHeight-100 - kTabBarHeight);
  58. self.pagerView.listContainerView.categoryNestPagingEnabled = YES;
  59. self.pagerView.mainTableView.gestureDelegate = self;
  60. self.pagerView.backgroundColor = [UIColor clearColor];
  61. self.pagerView.mainTableView.backgroundColor = [UIColor clearColor];
  62. [self.view addSubview:self.pagerView];
  63. self.categoryView.listContainer = (id<JXCategoryViewListContainer>)self.pagerView.listContainerView;
  64. }
  65. - (void)topViewAction:(CHATADDRESSTYPE)type search:(NSString *)searchKey {
  66. switch (type) {
  67. case CHATADDRESSTYPE_PERSON: // 联系人
  68. {
  69. [self.categoryView selectItemAtIndex:0];
  70. self.selectedIndex = 0;
  71. }
  72. break;
  73. case CHATADDRESSTYPE_GROUP: // 群组
  74. {
  75. [self.categoryView selectItemAtIndex:1];
  76. self.selectedIndex = 1;
  77. }
  78. break;
  79. case CHATADDRESSTYPE_SEARCH: // 搜索
  80. {
  81. [self searchRequest:searchKey];
  82. }
  83. break;
  84. default:
  85. break;
  86. }
  87. }
  88. - (void)searchRequest:(NSString *)searchKey {
  89. if (self.listViewArray.count > self.selectedIndex) {
  90. ChatAddressBodyView *listView = self.listViewArray[self.selectedIndex];
  91. listView.searchKey = searchKey;
  92. [listView refreshAndRequestData];
  93. }
  94. }
  95. - (void)viewWillAppear:(BOOL)animated {
  96. [super viewWillAppear:animated];
  97. self.navigationController.interactivePopGestureRecognizer.enabled = YES;
  98. if (self.listViewArray.count > self.categoryView.selectedIndex) {
  99. id value = self.listViewArray[self.categoryView.selectedIndex];
  100. if ([value isKindOfClass:[KSJXBodyView class]]) {
  101. KSJXBodyView *listView = (KSJXBodyView *)value;
  102. [listView beginFirstRefresh];
  103. }
  104. }
  105. }
  106. - (void)viewDidAppear:(BOOL)animated {
  107. [super viewDidAppear:animated];
  108. self.navigationController.interactivePopGestureRecognizer.enabled = (self.categoryView.selectedIndex == 0);
  109. }
  110. - (JXPagerView *)preferredPagingView {
  111. return [[JXPagerListRefreshView alloc] initWithDelegate:self];
  112. }
  113. #pragma mark - JXPagerViewDelegate
  114. - (UIView *)tableHeaderViewInPagerView:(JXPagerView *)pagerView {
  115. return [UIView new];
  116. }
  117. - (NSUInteger)tableHeaderViewHeightInPagerView:(JXPagerView *)pagerView {
  118. return CGFLOAT_MIN;
  119. }
  120. - (NSUInteger)heightForPinSectionHeaderInPagerView:(JXPagerView *)pagerView {
  121. return 10;
  122. }
  123. - (UIView *)viewForPinSectionHeaderInPagerView:(JXPagerView *)pagerView {
  124. return self.categoryView;
  125. }
  126. - (NSInteger)numberOfListsInPagerView:(JXPagerView *)pagerView {
  127. //和categoryView的item数量一致
  128. return self.titles.count;
  129. }
  130. - (id<JXPagerViewListViewDelegate>)pagerView:(JXPagerView *)pagerView initListAtIndex:(NSInteger)index {
  131. ChatAddressBodyView *listView = [[ChatAddressBodyView alloc] init];
  132. listView.naviController = self.navigationController;
  133. listView.isShareImage = YES;
  134. listView.shareImage = self.shareImage;
  135. MJWeakSelf;
  136. [listView shareCallback:^(BOOL isSuccess, NSString * _Nonnull desc) {
  137. if (weakSelf.callback) {
  138. weakSelf.callback(isSuccess, desc);
  139. [weakSelf.navigationController popViewControllerAnimated:YES];
  140. }
  141. }];
  142. [self.listViewArray addObject:listView];
  143. if (index == 0) {
  144. listView.selectIndex = 0;
  145. }else if (index == 1) {
  146. listView.selectIndex = 1;
  147. }
  148. [listView beginFirstRefresh];
  149. return listView;
  150. }
  151. #pragma mark - JXCategoryViewDelegate
  152. - (void)categoryView:(JXCategoryBaseView *)categoryView didSelectedItemAtIndex:(NSInteger)index {
  153. BOOL scrollPersonTable = index == 0;
  154. [self.headView scrollPersonTable:scrollPersonTable];
  155. self.selectedIndex = index;
  156. }
  157. #pragma mark - JXPagerMainTableViewGestureDelegate
  158. - (BOOL)mainTableViewGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
  159. //禁止categoryView左右滑动的时候,上下和左右都可以滚动
  160. if (otherGestureRecognizer == self.categoryView.collectionView.panGestureRecognizer) {
  161. return NO;
  162. }
  163. return [gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]] && [otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]];
  164. }
  165. - (NSMutableArray *)listViewArray {
  166. if (!_listViewArray) {
  167. _listViewArray = [NSMutableArray array];
  168. }
  169. return _listViewArray;
  170. }
  171. #pragma mark - JXCategoryListContentViewDelegate
  172. - (UIView *)listView {
  173. return self.view;
  174. }
  175. - (ChatAddressHeaderView *)headView {
  176. if (!_headView) {
  177. _headView = [ChatAddressHeaderView shareInstance];
  178. }
  179. return _headView;
  180. }
  181. - (void)setSelectedIndex:(NSInteger)selectedIndex {
  182. _selectedIndex = selectedIndex;
  183. ChatAddressBodyView *listView = self.listViewArray[selectedIndex];
  184. NSString *searchKey = listView.searchKey;
  185. self.headView.searchField.text = searchKey;
  186. }
  187. /*
  188. #pragma mark - Navigation
  189. // In a storyboard-based application, you will often want to do a little preparation before navigation
  190. - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
  191. // Get the new view controller using [segue destinationViewController].
  192. // Pass the selected object to the new view controller.
  193. }
  194. */
  195. @end