123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401 |
- //
- // KWSearchViewController.m
- // westkissMob
- //
- // Created by iOS on 2022/9/13.
- //
- #import "KWSearchViewController.h"
- #import "KWLenovoWordListView.h"
- #import "KWSearchSubTypeModel.h"
- #import "KWSearchViewModel.h"
- @interface KWSearchViewController () <UITextFieldDelegate>
- @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
|