// // KWSearchViewController.m // westkissMob // // Created by iOS on 2022/9/13. // #import "KWSearchViewController.h" #import "KWLenovoWordListView.h" #import "KWSearchSubTypeModel.h" #import "KWSearchViewModel.h" @interface KWSearchViewController () @property (nonatomic, strong) KWSearchViewModel *vm; @property (nonatomic, strong) KWHisAndHotWordsViewModel *hisVm; @property (nonatomic, strong) KWLenovoWordListView *lenovoV; @end @implementation KWSearchViewController - (instancetype)init { self = [super init]; if(self) { self.vm = [[KWSearchViewModel alloc] init]; [self.vm reqProductTypeList:^() {}]; self.hisVm= [[KWHisAndHotWordsViewModel alloc] init]; } return self; } - (void)viewDidLoad { [super viewDidLoad]; [self addSubVs]; [self getData]; @weakify(self); [self.vm reqCurrenciesList:^{ weak_self.leftTableV.moneyType = weak_self.vm.moneyType; [weak_self.leftTableV reloadData]; if (weak_self.leftTableV.selectIndex >= weak_self.leftTableV.arr.count) { weak_self.rightTableV.arr = weak_self.vm.moneyType.children; [weak_self.rightTableV reloadData]; } }]; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.navigationController setNavigationBarHidden:true]; if (self.vm.arr.count == 0) { [self getData]; } } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; } - (void)getData { @weakify(self); [self.vm reqProductTypeList:^() { weak_self.leftTableV.arr = weak_self.vm.arr; for (int i = 0; i < weak_self.vm.arr.count; i++) { if (weak_self.vm.arr[i] && weak_self.vm.arr[i].children.count > 0) { weak_self.leftTableV.selectIndex = i; weak_self.rightTableV.arr = weak_self.vm.arr[i].children; break; } } [weak_self.leftTableV reloadData]; [weak_self.rightTableV reloadData]; }]; if (self.vm.arr.count > 0) { self.leftTableV.arr = weak_self.vm.arr; for (int i = 0; i < weak_self.vm.arr.count; i++) { if (weak_self.vm.arr[i] && weak_self.vm.arr[i].children.count > 0) { weak_self.leftTableV.selectIndex = i; weak_self.rightTableV.arr = weak_self.vm.arr[i].children; break; } } } [self.leftTableV reloadData]; [self.rightTableV reloadData]; } -(void)addSubVs { self.view.backgroundColor = [UIColor colorWithHexString:@"#f8f8f8"]; self.leftTableV.backgroundColor = [UIColor colorWithHexString:@"#f8f8f8"]; [self.view addSubview:self.topV]; [self.view addSubview:self.bottomV]; [self.topV addSubview:self.searchTf]; [self.bottomV addSubview:self.leftTableV]; [self.bottomV addSubview:self.rightTableV]; [self.topV mas_makeConstraints:^(MASConstraintMaker *make) { make.top.left.right.equalTo(self.view); }]; [self.searchTf mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self.topV).offset(20); make.right.equalTo(self.topV).offset(-20); make.height.equalTo(@45); make.top.equalTo(self.view.mas_safeAreaLayoutGuideTop).offset(8); make.bottom.equalTo(self.topV).offset(-8); }]; [self.bottomV mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.topV.mas_bottom).offset(10); make.left.right.equalTo(self.view); make.bottom.equalTo(self.view.mas_safeAreaLayoutGuideBottom); }]; [self.leftTableV mas_makeConstraints:^(MASConstraintMaker *make) { make.width.equalTo(@130); make.left.top.bottom.equalTo(self.bottomV); }]; [self.rightTableV mas_makeConstraints:^(MASConstraintMaker *make) { make.top.bottom.right.equalTo(self.bottomV); make.left.equalTo(self.leftTableV.mas_right); }]; [self.view addSubview:self.hisWordV]; self.hisWordV.hidden = true; [self.hisWordV mas_makeConstraints:^(MASConstraintMaker *make) { make.leading.trailing.bottom.equalTo(self.view); make.top.equalTo(self.topV.mas_bottom); }]; [self.view addSubview:self.lenovoV]; self.lenovoV.hidden = true; [self.lenovoV mas_makeConstraints:^(MASConstraintMaker *make) { make.leading.trailing.equalTo(self.searchTf); make.top.equalTo(self.searchTf.mas_bottom); make.height.equalTo(@0); }]; } - (KWSearchMainTypeTableView *)leftTableV { if (!_leftTableV) { KWSearchMainTypeTableView *leftTab = [[KWSearchMainTypeTableView alloc] initWithFrame:CGRectMake(0, 10, 180, self.view.bounds.size.height) style:UITableViewStylePlain]; @weakify(self); _leftTableV = leftTab; leftTab.callBack = ^{ NSInteger selectIndex = weak_self.leftTableV.selectIndex; if (selectIndex >= weak_self.leftTableV.arr.count) { weak_self.rightTableV.arr = weak_self.leftTableV.moneyType.children; [weak_self.rightTableV reloadData]; return; } KWMainTypeModel *m = weak_self.leftTableV.arr[selectIndex]; if (m.children.count == 0) { [self toResult:m.title type:m.Id keyWord:@""]; } else { weak_self.rightTableV.arr = m.children; [weak_self.rightTableV reloadData]; } }; } return _leftTableV; } - (KWSearchSubTypeTableView *)rightTableV { if(!_rightTableV) { KWSearchSubTypeTableView *tab = [[KWSearchSubTypeTableView alloc] initWithFrame:CGRectMake(0, 10, 180, self.view.bounds.size.height) style:UITableViewStylePlain]; _rightTableV = tab; @weakify(self); [_rightTableV setCallBack:^(NSIndexPath * _Nonnull indexP) { KWSearchSubTypeModel *m = weak_self.rightTableV.arr[indexP.section].children[indexP.item]; [weak_self toResult:m.title type:m.Id keyWord:@""]; }]; [_rightTableV setCallBackSection:^(NSInteger index) { KWSubTypeSectionModel *m = weak_self.rightTableV.arr[index]; if (m.isMoneyType) { [MBProgressHUD showHUDAddedTo:weak_self.view animated:true]; [weak_self.vm switchCurrencie:m callback:^(BOOL flag) { if (flag) { [[NSNotificationCenter defaultCenter] postNotificationName:MoneyTypeChanged object:nil]; [weak_self.vm reqCurrenciesList:^{ [MBProgressHUD hideHUDForView:weak_self.view animated:true]; weak_self.leftTableV.moneyType = weak_self.vm.moneyType; weak_self.rightTableV.arr = weak_self.vm.moneyType.children; [weak_self.rightTableV reloadData]; }]; } else { [MBProgressHUD hideHUDForView:weak_self.view animated:true]; } }]; return; } [weak_self toResult:m.title type:m.Id keyWord:@""]; }]; } return _rightTableV; } -(UIView *)topV { if (!_topV) { UIView *v = [[UIView alloc] init]; v.backgroundColor = _FFD1B9;//[UIColor colorWithHexString:@"#FFF5F0"]; _topV = v; } return _topV; } -(UIView *)bottomV { if (!_bottomV) { UIView *v = [[UIView alloc] init]; v.backgroundColor = [UIColor colorWithHexString:@"#ffffff"]; _bottomV = v; } return _bottomV; } -(UITextField *)searchTf { if (!_searchTf) { UITextField *tf = [[UITextField alloc] init]; tf.delegate = self; tf.borderStyle = UITextBorderStyleNone; tf.backgroundColor = UIColor.whiteColor; tf.font = [UIFont fontWithName:Rob_Regular size:14]; tf.textAlignment = NSTextAlignmentLeft; tf.placeholder = @"SEARCH FOR PRODUCTS"; tf.textColor = _0B0B0B; tf.layer.masksToBounds = true; tf.clearButtonMode = UITextFieldViewModeAlways; UIView *tfLeftV = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 44, 45)]; UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; btn.frame = tfLeftV.bounds; [btn setImage:[UIImage imageNamed:@"search_tf"] forState:UIControlStateNormal]; [tfLeftV addSubview:btn]; tf.leftView = tfLeftV; tf.leftViewMode = UITextFieldViewModeAlways; _searchTf = tf; } return _searchTf; } -(KWHisAndHotWordsView *)hisWordV { if (!_hisWordV) { KWHisAndHotWordsView *v = [[KWHisAndHotWordsView alloc] initWithFrame:CGRectZero]; v.isSearch = true; @weakify(self); [v setCallBack:^(NSString * _Nonnull word) { weak_self.searchTf.text = word; [self.hisWordV.vm addSearchData:word]; [weak_self toResult:word type:@"" keyWord:word]; }]; [v setHotCallBack:^(KWSearchHotKeyModel * _Nonnull hot) { NSString *word = hot.title; if (hot.type != 1) { [self.hisWordV.vm addSearchData:word]; [weak_self toResult:word type:hot.code keyWord:@""]; return; } [self.hisWordV.vm addSearchData:word]; [weak_self toResult:word type:@"" keyWord:word]; }]; _hisWordV = v; } return _hisWordV; } - (KWLenovoWordListView *)lenovoV { if (!_lenovoV) { KWLenovoWordListView *v = [[KWLenovoWordListView alloc] initWithFrame:CGRectMake(self.searchTf.frame.origin.x, self.topV.maxY - 8, self.searchTf.frame.size.width, 200)]; @weakify(self); [v setCallBack:^(NSString * _Nonnull word) { weak_self.searchTf.text = word; [self.hisWordV.vm addSearchData:word]; [weak_self toResult:word type:@"" keyWord:word]; }]; _lenovoV = v; } return _lenovoV; } /// show lenovo Words - (void) showLenovoV:(NSString *)key { @weakify(self); [self.hisVm getAboutKeyList:key back:^{ if (weak_self.hisVm.aboutKeys.count > 0 && [self.searchTf.text isEqualToString:key]) { weak_self.lenovoV.hidden = false; [weak_self.lenovoV setData:weak_self.hisVm.aboutKeys origen:CGPointMake(self.searchTf.frame.origin.x, self.topV.maxY - 8)]; } else { weak_self.lenovoV.hidden = true; } }]; } - (void)hideLenovoV { self.lenovoV.hidden = true; } /// show lenovo Words - (void) showHisWordV { self.hisWordV.hidden = false; [_hisWordV reloadData]; } - (void)hideHisWordV { self.hisWordV.hidden = true; } // MARK: - pushResult - (void)toResult:(NSString *)key type:(NSString *)type keyWord:(NSString *)word { NSDictionary *para = @{ @"type":type, //String @"title":key,//String @"searchKey":word,//String }; UIViewController *vc = [CTMediator.sharedInstance getProductListVc:para]; [self.navigationController pushViewController:vc animated:true]; } // MARK: - uitextfiled delegate - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { [self showHisWordV]; NSString *txt = textField.text; if ([txt isEqualToString:@""] ) { [self hideLenovoV]; } else { [self showLenovoV:txt]; } return true; } - (BOOL)textFieldShouldClear:(UITextField *)textField { self.hisVm.aboutKeys = @[]; [self hideLenovoV]; return true; } - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { NSString *txt = textField.text; txt = [txt stringByReplacingCharactersInRange:range withString:string]; if ([txt isEqualToString:@""] ) { [self hideLenovoV]; } else { [self showLenovoV:txt]; } return true; } - (BOOL)textFieldShouldEndEditing:(UITextField *)textField { return true; } - (void)textFieldDidEndEditing:(UITextField *)textField { [self hideLenovoV]; [self hideHisWordV]; } - (BOOL)textFieldShouldReturn:(UITextField *)textField { [textField resignFirstResponder]; NSString *key = textField.text; if (![key isEmpty]){ [self.hisWordV.vm addSearchData:key]; [self toResult:key type:@"" keyWord:key]; } return true; } @end