ios - 点击完添加任务,再点取消控件失去响应问题

 mobiledu2502873093 发布于 2022-10-28 09:38

我点击完添加任务,然后再按返回键,想要收回键盘,改变约束,发现卡住了,当然如果数据少的话,不存在这个问题
图片和代码如下


UIButton *addCard = UIButton.new;

            [footer addSubview:addCard];
                   [self.arrAddCards addObject:addCard];
    
                    [addCard makeConstraints:^(MASConstraintMaker *make) {

                        make.top.equalTo(0);
                        make.bottom.equalTo(0);
                        make.right.equalTo(0);
                        make.left.equalTo(0);
                        
                    }];
                    [addCard setTitle:@"添加任务" forState:UIControlStateNormal];
                    [addCard setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
                    [addCard setTitleColor:[UIColor lightGrayColor] forState:UIControlStateHighlighted];
                    addCard.titleLabel.font = [UIFont systemFontOfSize:15];
                    addCard.backgroundColor = [UIColor clearColor];
                    self.addCards = addCard;
                    // [addCard addTarget:self action:@selector(addCard:) forControlEvents:UIControlEventTouchUpInside];
                    //使用ReactiveCocoa处理点击事件,相当于上面的addTarget:方法
                    //addCard点击事件
                    [[addCard rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(id x) {
                         NSLog(@"%ld",(unsigned long)self.unNetArr.count);
                      
                          self.yesOrNo = NO;
                          //隐藏addCard
                          addCard.alpha = 0;
                          //输入框
                          UITextView *textView = ({
                              UITextView *view = [UITextView new];
                              [footer addSubview:view];
                              [view makeConstraints:^(MASConstraintMaker *make) {
                                  make.left.equalTo(10);
                                  make.top.equalTo(3);
                                  make.right.equalTo(-10);
                                  make.bottom.equalTo(-44+2);
                              }];
                              //因为footer变大,所以改变tableView的contentInset
                              listTableView.contentInset = UIEdgeInsetsMake(46, 0, 88, 0);
                              
                              view.font = [UIFont systemFontOfSize:15];
                              
                              //立即刷新视图
                              [self layoutIfNeeded];
                              
                              view;
                          });
                          self.textView = textView;
                          
                          //初始化add按钮
                          UIButton *add = ({
                              
                              UIButton *view = [UIButton new];
                              view.contentHorizontalAlignment=UIControlContentHorizontalAlignmentCenter;
                              [view setTitle:NSLocalizedString(@"add", nil) forState:UIControlStateNormal];
                              [view setTitleColor:Global_trelloBlue forState:UIControlStateNormal];
                              [view setTitleColor:[UIColor lightGrayColor] forState:UIControlStateHighlighted];
                              [view setTitleEdgeInsets:UIEdgeInsetsMake(0, -40, 0, -80)];
                              [view.titleLabel setFont:[UIFont fontWithName:@"Arial-Bold" size:18]];
                              view.titleLabel.font = [UIFont systemFontOfSize:15];
                              [footer addSubview:view];
                              [view makeConstraints:^(MASConstraintMaker *make) {
                                  make.right.equalTo(0);
                                  make.bottom.equalTo(-1);
                                  make.width.equalTo(120);
                              }];
                              
                              [view sizeToFit];
                              //初始化后隐藏(为了动画效果)
                              view.alpha = 0;
                              //立即刷新
                              [self layoutIfNeeded];
                              
                              //add点击事件,创建新的tast
                              [[view rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(id x) {
                                  
                                  //textView判空
                                  if (![textView.text isEqualToString:@""]) {
                                      self.yesOrNo = NO;
                                      AddTaskApi *api = AddTaskApi.new;
                                      //如果在没有task的列添加新的task,t_sort传0
                                      api.t_sort = @(0);
                                      //都上传0
                                      api.t_taskContent = textView.text;
                                      api.t_projectId = @(_project_id.integerValue);
                                      //当前列的id
                                      api.t_panel_id = @(listTableView.model.id.integerValue);
                                      NSLog(@"<><>%@",_project_id);
                                      //判断是否有网
                                      [GLobalRealReachability reachabilityWithBlock:^(ReachabilityStatus status) {
                                          switch (status)
                                          {
                                              case RealStatusNotReachable:
                                              {
                                                  NewTasklistModel *model = [[NewTasklistModel alloc]init];
                                                  model.unloading = YES;
                                                  model.t_taskContent = textView.text;
                                                  textView.text = nil;
                                                  model.t_sort = @"0";
                                                  model.t_id = [_project_id integerValue];
                                                  model.t_panel_id = listTableView.model.id;
                                                  model.page = idx;
                                                  
                                                  [listTableView.model.task addObject:model];
                                                  [self.unNetArr addObject:model];
                                                  NSLog(@"%ld",(unsigned long)self.unNetArr.count);
                                                  //插入行
                                                  [listTableView insertRow:(listTableView.model.task.count-1)inSection:0 withRowAnimation:
                                                   UITableViewRowAnimationBottom];
                                                  
                                                  //计算rowHeight
                                                  CGFloat rowHeight = [self tableView:listTableView heightForRowAtIndexPath:[NSIndexPath indexPathForRow:listTableView.model.task.count-1 inSection:0]];
                                                  //根据当前列高度和rowHeight决定列高度是否增加
                                                  //updateConstraints:方法更新autolayout
                                                  [listView updateConstraints:^(MASConstraintMaker *make) {
                                                      //增加新的rowHeight后list超出允许最大高度,之前不满最大高度
                                                      if (listTableView.cellTotalHeight > (kTotalCellMaxHeight+NavAndStatusBarHeight-_keyboardHeight-44) && (listTableView.cellTotalHeight-rowHeight) < (kTotalCellMaxHeight+NavAndStatusBarHeight-_keyboardHeight-44)) {
                                                          make.height.equalTo(listView.yyHeight+((kTotalCellMaxHeight+NavAndStatusBarHeight-_keyboardHeight-44)-(listTableView.cellTotalHeight-rowHeight)));
                                                      }
                                                      //增加新的rowHeight后list没有超过允许最大高度
                                                      if (listTableView.cellTotalHeight <= (kTotalCellMaxHeight+NavAndStatusBarHeight-_keyboardHeight-44)) {
                                                          make.height.equalTo(listView.yyHeight+rowHeight);
                                                      }
                                                  }];
                                                  //tableView滚动到最底部,显示新添加行
                                                  [listTableView scrollToRow:listTableView.model.task.count-1 inSection:0 atScrollPosition:UITableViewScrollPositionBottom animated:NO];
                                                  //autolayout动画
                                                  [self layoutIfNeeded];
                                                  //                                               [listTableView reloadRow:listTableView.model.task.count-1 inSection:0 withRowAnimation:UITableViewRowAnimationBottom];
                                                  
                                                  
                                                  //改变原列的标题数量
                                                  UITextField *sourceListTableHeaderTF=(UITextField *)[self viewWithTag:[listTableView.model.id integerValue]];
                                                  sourceListTableHeaderTF.text=[NSString stringWithFormat:@"%@ %ld",listTableView.model.name,(unsigned long)listTableView.model.task.count];
                                                  break;
                                              }
                                              case RealStatusUnknown:
                                              {
                                                  NewTasklistModel *model = [[NewTasklistModel alloc]init];
                                                  model.unloading = YES;
                                                  model.t_taskContent = textView.text;
                                                  textView.text = nil;
                                                  model.t_sort = @"0";
                                                  model.t_id = [_project_id integerValue];
                                                  model.t_panel_id = listTableView.model.id;
                                                  model.page = idx;
                                                  
                                                  [listTableView.model.task addObject:model];
                                                  [self.unNetArr addObject:model];
                                                  
                                                  //插入行
                                                  [listTableView insertRow:(listTableView.model.task.count-1)inSection:0 withRowAnimation:
                                                   UITableViewRowAnimationBottom];
                                                  
                                                  //计算rowHeight
                                                  CGFloat rowHeight = [self tableView:listTableView heightForRowAtIndexPath:[NSIndexPath indexPathForRow:listTableView.model.task.count-1 inSection:0]];
                                                  //根据当前列高度和rowHeight决定列高度是否增加
                                                  //updateConstraints:方法更新autolayout
                                                  [listView updateConstraints:^(MASConstraintMaker *make) {
                                                      //增加新的rowHeight后list超出允许最大高度,之前不满最大高度
                                                      if (listTableView.cellTotalHeight > (kTotalCellMaxHeight+NavAndStatusBarHeight-_keyboardHeight-44) && (listTableView.cellTotalHeight-rowHeight) < (kTotalCellMaxHeight+NavAndStatusBarHeight-_keyboardHeight-44)) {
                                                          make.height.equalTo(listView.yyHeight+((kTotalCellMaxHeight+NavAndStatusBarHeight-_keyboardHeight-44)-(listTableView.cellTotalHeight-rowHeight)));
                                                      }
                                                      //增加新的rowHeight后list没有超过允许最大高度
                                                      if (listTableView.cellTotalHeight <= (kTotalCellMaxHeight+NavAndStatusBarHeight-_keyboardHeight-44)) {
                                                          make.height.equalTo(listView.yyHeight+rowHeight);
                                                      }
                                                  }];
                                                  //tableView滚动到最底部,显示新添加行
                                                  [listTableView scrollToRow:listTableView.model.task.count-1 inSection:0 atScrollPosition:UITableViewScrollPositionBottom animated:NO];
                                                  //autolayout动画
                                                  [self layoutIfNeeded];
                                                  
                                                  
                                                  
                                                  //改变原列的标题数量
                                                  UITextField *sourceListTableHeaderTF=(UITextField *)[self viewWithTag:[listTableView.model.id integerValue]];
                                                  sourceListTableHeaderTF.text=[NSString stringWithFormat:@"%@ %ld",listTableView.model.name,(unsigned long)listTableView.model.task.count];
                                                  break;
                                              }
                                                  
                                                  
                                              default:
                                                  //发起请求
                                                  [api startWithCompletionBlockWithSuccess:^(YTKBaseRequest *request) {
                                                      SLog(@"<><>>>%@",request);
                                                      NewTasklistModel *model = request.responseModel;
                                                      model.unloading = NO;
                                                      
                                                      //存在即失败(接口定义,只在失败时才返回status值)
                                                      if (model.status) {
                                                          
                                                      }
                                                      else { //添加成功
                                                          textView.text = nil;
                                                          //更新数据源
                                                          [listTableView.model.task addObject:model];
                                                          //插入行
                                                          [listTableView insertRow:(listTableView.model.task.count-1)inSection:0 withRowAnimation:
                                                           UITableViewRowAnimationBottom];
                                                          //计算rowHeight
                                                          CGFloat rowHeight = [self tableView:listTableView heightForRowAtIndexPath:[NSIndexPath indexPathForRow:listTableView.model.task.count-1 inSection:0]];
                                                          
                                                          
                                                          //根据当前列高度和rowHeight决定列高度是否增加
                                                          //updateConstraints:方法更新autolayout
                                                          
                                                          [listView updateConstraints:^(MASConstraintMaker *make) {
                                                              //增加新的rowHeight后list超出允许最大高度,之前不满最大高度
                                                              if (listTableView.cellTotalHeight > (kTotalCellMaxHeight+NavAndStatusBarHeight-_keyboardHeight-44) && (listTableView.cellTotalHeight-rowHeight) < (kTotalCellMaxHeight+NavAndStatusBarHeight-_keyboardHeight-44)) {
                                                                  make.height.equalTo(listView.yyHeight+((kTotalCellMaxHeight+NavAndStatusBarHeight-_keyboardHeight-44)-(listTableView.cellTotalHeight-rowHeight)));
                                                              }
                                                              
                                                              //增加新的rowHeight后list没有超过允许最大高度
                                                              if (listTableView.cellTotalHeight <= (kTotalCellMaxHeight+NavAndStatusBarHeight-_keyboardHeight-44)) {
                                                                  make.height.equalTo(listView.yyHeight+rowHeight);
                                                              }
                                                          }];
                                                          //tableView滚动到最底部,显示新添加行
                                                          [listTableView scrollToRow:listTableView.model.task.count-1 inSection:0 atScrollPosition:UITableViewScrollPositionBottom animated:NO];
                                                          [self layoutIfNeeded];
                                                          //autolayout动画
                                                          
                                                          
                                                          //改变原列的标题数量
                                                          UITextField *sourceListTableHeaderTF=(UITextField *)[self viewWithTag:[listTableView.model.id integerValue]];
                                                          sourceListTableHeaderTF.text=[NSString stringWithFormat:@"%@ %ld",listTableView.model.name,(unsigned long)listTableView.model.task.count];
                                                          
                                                      }
                                                  } failure:^(YTKBaseRequest *request) {
                                                      
                                                  }];
                                                  break;
                                          }
                                      }];
                                      
                                      
                                      
                                      
                                      
                                  }else{
                                      self.yesOrNo = YES;
                                      
                                      [footer updateConstraints:^(MASConstraintMaker *make) {
                                          make.height.equalTo(44);
                                      }];
                                      //list减去footer增加的高度(在这里做是为了动效)
                                      [listView updateConstraints:^(MASConstraintMaker *make) {
                                          make.height.equalTo(listView.yyHeight-44);
                                      }];
                                      //tableView的contentInset还原
                                      listTableView.contentInset = UIEdgeInsetsMake(46, 0, 44, 0);
                                      //隐藏textView
                                      textView.alpha = 0;
                                      
                                      [UIView animateWithDuration:0.25 animations:^{
                                          //cancel隐藏
                                          view.alpha = 0;
                                          
                                          //add隐藏
                                          self.cancel.alpha = 0;
                                          //addCard显示
                                          addCard.alpha = 1;
                                          [self.viewController.navigationController setNavigationBarHidden:NO animated:YES];
                                          [self layoutIfNeeded];
                                      }];
                                      [textView resignFirstResponder];
                                      
                                  }
                              }];
                              view;
                          });
                          self.addView = add;
                          //初始化cancel按钮
                          UIView *cancel = ({
                              UIButton *view = [UIButton new];
                              view.contentHorizontalAlignment=UIControlContentHorizontalAlignmentCenter;
                              [view setTitle:NSLocalizedString(@"cancel", nil) forState:UIControlStateNormal];
                              [view setTitleColor:Global_trelloBlue forState:UIControlStateNormal];
                              [view.titleLabel setFont:[UIFont fontWithName:@"Arial-Bold" size:18]];
                              [view setTitleColor:[UIColor lightGrayColor] forState:UIControlStateHighlighted];
                              [view setTitleEdgeInsets:UIEdgeInsetsMake(0, -80, 0, -40)];
                              view.titleLabel.font = [UIFont systemFontOfSize:15];
                              [footer addSubview:view];
                              [view makeConstraints:^(MASConstraintMaker *make) {
                                  make.left.equalTo(0);
                                  make.bottom.equalTo(-1);
                                  make.width.equalTo(120);
                              }];
                              [view sizeToFit];
                              view.alpha = 0;
                              [self layoutIfNeeded];
                              //cancel点击事件
                              @weakify(self, view, textView, footer, listView, add, addCard)
                              [[view rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(id x)
                               {
                                   @strongify(self, view, textView, footer, listView, add, addCard)
                                     //footer高度还原
                                     self.yesOrNo = YES;
                                     [textView resignFirstResponder];
                                     // list减去footer增加的高度(在这里做是为了动效)
                                     [footer updateConstraints:^(MASConstraintMaker *make) {
                                         make.height.equalTo(44);
                                     }];
                                     [listView updateConstraints:^(MASConstraintMaker *make) {
                                         make.height.equalTo(listView.yyHeight);
                                     }];
                                   //  tableView的contentInset还原
                                     listTableView.contentInset = UIEdgeInsetsMake(46, 0, 44, 0);
                                   // 隐藏textView
                                     textView.alpha = 0;
                                     [UIView animateWithDuration:0.5 animations:^{
                                         //cancel隐藏
                                         view.alpha = 0;
                                         //add隐藏
                                         add.alpha = 0;
                                         //addCard显示
                                         addCard.alpha = 1;
                                         [self.viewController.navigationController setNavigationBarHidden:NO animated:NO];
                                         [self layoutIfNeeded];
                                     }];
                                }];
                              view;
                          });
                          self.cancel = cancel;
                          // addCard点击后动效
                          [footer updateConstraints:^(MASConstraintMaker *make) {
                              make.height.equalTo(44+44);
                          }];
                          [textView updateConstraints:^(MASConstraintMaker *make) {
                              make.top.equalTo(2);
                          }];
                          [listView updateConstraints:^(MASConstraintMaker *make) {
                              make.height.equalTo(listView.yyHeight+44);
                          }];
                          self.contentSize = CGSizeMake(self.contentSize.width, 244);
                          [UIView animateWithDuration:0.25 animations:^{
                              [self.viewController.navigationController setNavigationBarHidden:YES animated:YES];
                              add.alpha = 1;
                              cancel.alpha = 1;
                              [self layoutIfNeeded];
                          }];
                          //弹出键盘
                          [textView becomeFirstResponder];
                          //tableView滚动到最底部,显示新添加行
                          //                            [listTableView scrollToBottom];
                          listTableView.bounces = NO;
                          if (listTableView.model.task.count>1) {
                              
                              [listTableView scrollToRow:listTableView.model.task.count-1 inSection:0 atScrollPosition:UITableViewScrollPositionBottom animated:YES];
                          }
                    
                    }];
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有